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