从嵌套字典创建Spark DataFrame

时间:2015-04-21 11:14:50

标签: apache-spark pyspark

我有一个嵌套字典列表,例如ds = [{'a': {'b': {'c': 1}}}]并希望在推断嵌套词典的架构时从中创建一个Spark DataFrame。使用sqlContext.createDataFrame(ds).printSchema()为我提供了以下架构

root
 |-- a: map (nullable = true)
 |    |-- key: string
 |    |-- value: map (valueContainsNull = true)
 |    |    |-- key: string
 |    |    |-- value: long (valueContainsNull = true)

但我需要的是这个

root
 |-- a: struct (nullable = true)
 |    |-- b: struct (nullable = true)
 |    |    |-- c: long (nullable = true)

可以通过首先将字典转换为JSON,然后使用jsonRDD加载它来创建第二个模式,如sqlContext.jsonRDD(sc.parallelize([json.dumps(ds[0])])).printSchema()。但是对于大文件来说这会非常麻烦。

我考虑过将字典转换为pyspark.sql.Row()对象,希望数据框能够推断出架构,但是当字典有不同的架构时(例如,第一个缺少某些键),它就不起作用了。

还有其他办法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这会有所帮助。

ls -lt|grep "Jun 18" > cat *|grep "ERROR"

然后,

import json
ds = [{'a': {'b': {'c': 1}}}]
ds2 = [json.dumps(item) for item in ds]
df = sqlCtx.jsonRDD(sc.parallelize(ds2))
df.printSchema()