Pyspark 将 rdd 转换为具有空值的数据帧

Posted

技术标签:

【中文标题】Pyspark 将 rdd 转换为具有空值的数据帧【英文标题】:Pyspark converting rdd to dataframe with nulls 【发布时间】:2017-01-13 12:02:01 【问题描述】:

我正在使用 pyspark (1.6) 和 elasticsearch-hadoop (5.1.1)。我通过以下方式将我的数据从 elasticsearch 转换为 rdd 格式:

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 集群的字典,作为 sc 的 SparkContext 对象。这工作正常,我得到了 rdd 对象。

我想使用

将其转换为数据框
df = es_rdd.toDF()

但我得到了错误:

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

给 toDF 方法一个 sampleSize 会导致同样的错误。据我了解,这是因为 pyspark 无法确定每个字段的类型。我知道我的弹性搜索集群中有一些字段都是空的。

将其转换为数据框的最佳方法是什么?

【问题讨论】:

【参考方案1】:

告诉 Spark 您要转换的数据类型的最佳方式。请参阅createDataFrame 的文档和第五个示例(里面有StructType 的那个)

【讨论】:

以上是关于Pyspark 将 rdd 转换为具有空值的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 将 RDD 行转换为数据帧时出错

将 Pyspark 数据框转换为具有实际值的列表

数据帧到 RDD[Row] 用空值替换空间

将 Pyspark RDD 转换为 Pandas 数据框

将 RDD 转换为列联表:Pyspark

Pyspark 将 JSON 读取为 dict 或 struct 而不是数据帧/RDD