2017-01-13 7 views
0

Я использую pyspark (1.6) и elasticsearch-hadoop (5.1.1). Я получаю мои данные из elasticsearch в формат РДД с помощью:Pyspark преобразование rdd в dataframe с нулями

es_rdd = sc.newAPIHadoopRDD(            
    inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",   
    keyClass="org.apache.hadoop.io.NullWritable",       
    valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable",  
    conf=es_read_conf) 

Здесь es_read_conf только словарь моего ES кластера, так как СБН объект SparkContext. Это отлично работает, и я получаю объекты rdd в порядке.

Я хотел бы, чтобы преобразовать это dataframe используя

df = es_rdd.toDF() 

, но я получаю ошибку:

ValueError: Some of types cannot be determined by the first 100 rows, please try again with sampling 

Давать метод toDF а результаты SampleSize в одной и той же ошибки. Из того, что я понимаю, это происходит потому, что pyspark не может определить тип каждого поля. Я знаю, что в моем кластере elasticsearch есть поля, которые являются нулевыми.

Каков наилучший способ конвертировать это в dataframe?

ответ

1

Лучший способ рассказать о типах данных, которые вы конвертируете. Пожалуйста, см. Документацию от createDataFrame с пятым примером (с номером StructType внутри)