Apache spark 从嵌套字典创建Spark数据帧
我有一个嵌套字典的列表,例如,Apache spark 从嵌套字典创建Spark数据帧,apache-spark,pyspark,Apache Spark,Pyspark,我有一个嵌套字典的列表,例如,ds=[{'a':{'b':{'c':1}}}]并希望在推断嵌套字典的模式时从中创建一个spark数据帧。使用sqlContext.createDataFrame(ds).printSchema()可以提供以下模式 root |-- a: map (nullable = true) | |-- key: string | |-- value: map (valueContainsNull = true) | | |-- key: st
ds=[{'a':{'b':{'c':1}}}]
并希望在推断嵌套字典的模式时从中创建一个spark数据帧。使用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()
对象,希望dataframe能够推断出模式,但当字典具有不同的模式(例如,first缺少一些键)时,它就不起作用了
还有别的办法吗?谢谢 我想这会有帮助
import json
ds = [{'a': {'b': {'c': 1}}}]
ds2 = [json.dumps(item) for item in ds]
df = sqlCtx.jsonRDD(sc.parallelize(ds2))
df.printSchema()
那么
root
|-- a: struct (nullable = true)
| |-- b: struct (nullable = true)
| | |-- c: long (nullable = true)
我想避免这种情况(见我的问题)。我希望有一种方法可以做到这一点,而不必从字典中创建RDD来获取其模式。很抱歉,您错过了中间的一段。不幸的是,“从字典推断模式”功能现在已被弃用,我希望还有另一种方法。