如何在PySpark中将嵌套结构体数组展平为逗号分隔字符串?
解决方案
核心思路
原DataFrame中mydoc是数组类型,每个数组元素的Information又是结构体数组,导致mydoc.Information.Name本质是二维数组,而array_join仅支持一维数组拼接。因此需要先用flatten函数将二维数组转为一维,再提取对应字段完成拼接。
具体代码
首先导入PySpark函数库:
from pyspark.sql import functions as F
执行转换操作:
flat_df = df.select( F.array_join(F.flatten(F.col("mydoc.Information")).Name, ",").alias("flatName"), F.array_join(F.flatten(F.col("mydoc.Information")).Id.cast("string"), ",").alias("flatId"), F.array_join(F.flatten(F.col("mydoc.Information")).Car, ",").alias("flatCar"), F.array_join(F.flatten(F.col("mydoc.Information")).Age.cast("string"), ",").alias("flatAge") )
代码解释
F.flatten(F.col("mydoc.Information")):把mydoc数组中每个元素的Information数组“拉平”为一维结构体数组,将所有嵌套的Information结构体合并到同一层级。.Name/.Id等:从拉平后的结构体数组中提取对应字段,得到由所有该字段值组成的一维数组。F.array_join(..., ","):将一维数组用逗号拼接为字符串,默认忽略空元素,若需保留空值可添加null_replacement参数。.cast("string"):Id和Age为数值类型,需先转为字符串才能参与拼接,避免类型报错。
内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ
相关产品推荐
相关产品推荐

