2017-01-13 1 views
0

J'utilise pyspark (1.6) et elasticsearch-hadoop (5.1.1). Je reçois mes données de ElasticSearch dans un format RDD via:Pyspark convertissant rdd en données avec des zéros

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) 

Ici es_read_conf est juste un dictionnaire de mon groupe d'ES, comme sc l'objet SparkContext. Cela fonctionne bien et j'obtiens les objets rdd bien.

Je voudrais convertir en une trame de données en utilisant

df = es_rdd.toDF() 

mais je reçois l'erreur:

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

Donner la méthode toDF un des résultats sampleSize dans la même erreur. D'après ce que je comprends, cela se produit parce que pyspark est incapable de déterminer le type de chaque champ. Je sais qu'il y a des champs dans mon cluster elasticsearch qui sont tous null.

Quelle est la meilleure façon de le convertir en données?

Répondre

1

La meilleure façon de dire aux types de données Spark que vous convertissez. S'il vous plaît voir la documentation de createDataFrame avec cinquième exemple (celui avec StructType à l'intérieur)