Dataframe 将3级嵌套字典键值转换为pyspark数据帧

Dataframe 将3级嵌套字典键值转换为pyspark数据帧,dataframe,apache-spark,pyspark,partition,Dataframe,Apache Spark,Pyspark,Partition,我有一个Pyspark数据框,看起来像这样: 我想提取“dic”列中的嵌套字典,并将它们转换为PySpark数据帧。像这样: 此外,每行中的键都会有一些变化,即,某些行可能有其他行没有的字段。我希望包括所有字段,如果记录没有特定的字段/键,则该值可以显示为“null” 请让我知道我如何才能做到这一点 谢谢 以下是一些帮助您入门的代码: 数据=[ (“你好”,“姓名”:“大卫”,“年龄”:“25”,“地点”:“纽约”,“身高”:“170”,“场地”:“颜色”:“蓝色”,“形状”:“圆形”,“爱

我有一个Pyspark数据框,看起来像这样:

我想提取“dic”列中的嵌套字典,并将它们转换为PySpark数据帧。像这样:

此外,每行中的键都会有一些变化,即,某些行可能有其他行没有的字段。我希望包括所有字段,如果记录没有特定的字段/键,则该值可以显示为“null”

请让我知道我如何才能做到这一点


谢谢

以下是一些帮助您入门的代码:

数据=[
(“你好”,“姓名”:“大卫”,“年龄”:“25”,“地点”:“纽约”,“身高”:“170”,“场地”:“颜色”:“蓝色”,“形状”:“圆形”,“爱好”:“{“舞蹈”:“1”,“唱歌”:“2”},“技能”:{“编码”:“2”,“游泳”:“4”},“再见”),
(“你好”,“姓名”:“海伦”,“年龄”:“28”,“地点”:“纽约”,“身高”:“160”,“田地”:“颜色”:“蓝色”,“形状”:“圆形”,“爱好”:{“舞蹈”:“5”,“唱歌”:“6”}},“再见”),
]
df=spark.createDataFrame(数据,[“问候”、“dic”、“告别”])
res=df.select(
F.col(“dic”).getItem(“名称”).别名(str(“名称”)),
F.col(“dic”)[“Age”]。别名(str(“Age”))
)
Spark无法处理多个不同类型的字典值。常规Python可以处理混合类型的字典键/值

我们可以运行
df.printSchema()
查看PySpark如何解释字典值:

root
 |-- greeting: string (nullable = true)
 |-- dic: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
 |-- farewell: string (nullable = true)
示例数据集混合了字符串和字典值。运行
df。选择(F.col(“dic”).getItem(“fields”)).printSchema()
查看:

root
 |-- dic[fields]: string (nullable = true)

也许有某种方法可以解析字符串并将其转换为映射,但这样做的代价很高。能否在问题中添加
printSchema
?您可能需要重新构造数据,以便更容易地找到答案;)

dic
列中的键是否始终相同?
dic
是否对每一行数据都有相同的结构?@Powers我相信这些行中有一些变化。酷,请随意使用解决方案应该能够处理的一组代表性变化来更新问题。@Powers我刚刚进行了更新。这是否回答了您的问题?我已经对样本数据进行了更新。对不起,我写得太匆忙了。它们都应该是字典值。很抱歉,我不能提供真实的数据
root
 |-- greeting: string (nullable = true)
 |-- dic: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
 |-- farewell: string (nullable = true)
root
 |-- dic[fields]: string (nullable = true)