Pyspark 将 rdd 转换为具有空值的数据帧
Pyspark converting rdd to dataframe with nulls
我正在使用 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 无法确定每个字段的类型。我知道我的 elasticsearch 集群中有一些字段都是空的。
将其转换为数据帧的最佳方法是什么?
告诉 Spark 您要转换的数据类型的最佳方式。请参阅 createDataFrame 的文档和第五个示例(里面有 StructType
的那个)
我正在使用 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 无法确定每个字段的类型。我知道我的 elasticsearch 集群中有一些字段都是空的。
将其转换为数据帧的最佳方法是什么?
告诉 Spark 您要转换的数据类型的最佳方式。请参阅 createDataFrame 的文档和第五个示例(里面有 StructType
的那个)