Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从嵌套字典创建Spark数据帧_Apache Spark_Pyspark - Fatal编程技术网

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来获取其模式。很抱歉,您错过了中间的一段。不幸的是,“从字典推断模式”功能现在已被弃用,我希望还有另一种方法。