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

PySpark如何将多列同时拆分转为多行 解决拆分空值问题

PySpark实现多列拆分后全组合转多行方案

问题原因排查

你之前使用arrays_zip出现空值是因为该函数是按索引位置配对两个数组的元素,当两个数组长度不一致时,短数组缺失的索引位置会自动填充null。而你的需求是获取拆分后两个数组的全笛卡尔积组合,不需要按位置对齐,因此不需要使用zip相关函数。

具体实现代码

1. 导入依赖函数

from pyspark.sql.functions import split, explode

2. 核心处理逻辑

# 第一步:将subject和parts列按逗号拆分为数组
df_split = df \
    .withColumn("subject_arr", split("subject", ",")) \
    .withColumn("parts_arr", split("parts", ","))

# 第二步:分别对两个数组执行explode展开为多行,自动生成所有组合
df_result = df_split \
    .withColumn("subject", explode("subject_arr")) \
    .withColumn("parts", explode("parts_arr")) \
    # 仅保留需要的输出列
    .select("Name", "age", "subject", "parts")

3. 结果验证

执行df_result.show()即可得到你期望的输出:

+----+---+-------+-----+
|Name|age|subject|parts|
+----+---+-------+-----+
|xxxx| 21|  Maths|    I|
|xxxx| 21|Physics|    I|
|yyyy| 22|English|    I|
|yyyy| 22|English|   II|
|yyyy| 22| French|    I|
|yyyy| 22| French|   II|
+----+---+-------+-----+

可选优化

如果你的数据中存在拆分后是空数组的场景,不想让整行数据被丢弃,可以将explode替换为explode_outer,空数组对应的位置会自动填充null。

内容的提问来源于stack exchange,提问作者Padfoot123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:45:03