我有一个嵌套字典的列表,例如 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()
对象,希望数据框架可以推断模式,但当字典具有不同的模式时(例如第一个缺少某些键),它并没有起作用。还有其他方法吗?谢谢!