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

如何在PySpark中将JSON字符串数组列拆分为多行?

在PySpark中拆分JSON字符串数组为多行

要实现将addresses列的JSON字符串数组拆分为多行,直接通过解析字符串数组→拆分数组→转回JSON字符串三步即可完成,具体实现如下:

完整代码示例

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

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

# 定义单个地址JSON对象的Schema,匹配数组内JSON的结构
address_schema = StructType([
    StructField("city", StringType(), nullable=True),
    StructField("state", StringType(), nullable=True),
    StructField("street", StringType(), nullable=True),
    StructField("postalCode", StringType(), nullable=True),
    StructField("country", StringType(), nullable=True)
])

# 创建示例输入数据框
data = [(1, '[{"city":null,"state":null,"street":"123, ABC St, ABC  Square","postalCode":"11111","country":"USA"},{"city":"Dallas","state":"TX","street":"456, DEF Plaza, Test St","postalCode":"99999","country":"USA"}]')]
df = spark.createDataFrame(data, ["id", "addresses"])

# 核心处理逻辑
result_df = df.withColumn("address_array", from_json(df.addresses, ArrayType(address_schema))) \
              .withColumn("address_obj", explode("address_array")) \
              .withColumn("addresses", to_json("address_obj")) \
              .select("id", "addresses")

# 查看结果
result_df.show(truncate=False)

关键步骤说明

  1. 解析JSON字符串数组:用from_json将字符串类型的addresses列转换为PySpark原生的ArrayType数组,每个元素是符合address_schema的结构体。
  2. 拆分数组:使用explode函数将数组中的每个元素单独拆分成一行,原id值保持不变。
  3. 转回JSON字符串:通过to_json将结构体类型的地址对象转回JSON字符串格式,完全匹配期望的输出样式。

执行后得到的结果与你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:15:44