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

如何使用PySpark将DataFrame中JSON列的数组元素拆分为多行

你需要使用PySpark内置的explode函数对数组类型的number列执行拆行操作,即可实现每个数组元素拆分到独立行、对应id自动重复的效果。

完整实现代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import from_json, col, explode
from pyspark.sql.types import StructType, StructField, IntegerType, ArrayType, StringType

# 初始化SparkSession
spark = SparkSession.builder.appName("array_explode_demo").getOrCreate()

# 构造测试数据
df = spark.createDataFrame([
      ('{"id":10, "number" : ["1.1", "1.2", "1.3"]}',),
      ('{"id":20, "number" : ["2.1", "2.2", "2.3"]}',),
       ], schema=["_1"])

# 定义JSON解析的Schema
Sch = StructType([
    StructField("id", IntegerType(), nullable=True),
    StructField("number", ArrayType(StringType()), nullable=True)
])

# 解析JSON后拆分数组为多行
result_df = df.withColumn("n", from_json(col("_1"), Sch)) \
              .select("n.*") \
              .withColumn("number", explode(col("number"))) # 核心拆行代码

你也可以直接在select阶段完成拆行,写法更简洁:

result_df = df.withColumn("n", from_json(col("_1"), Sch)) \
              .select(col("n.id"), explode(col("n.number")).alias("number"))

输出结果

执行result_df.show()即可得到你需要的结构:

+---+------+
| id|number|
+---+------+
| 10|   1.1|
| 10|   1.2|
| 10|   1.3|
| 20|   2.1|
| 20|   2.2|
| 20|   2.3|
+---+------+

补充说明

如果你的number数组存在空值/空数组的场景,不想让对应id的行被丢弃,可以把explode替换为explode_outer,空数组对应的行number列会显示为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:30:03