You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:42:43