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

如何将PySpark DataFrame中的JSON字段展开为名称-值对?

PySpark DataFrame 转换方案

要实现这个结构转换,分两步操作即可:

1. 解析字符串类型的JSON列

原DataFrame里的json列是字符串格式,首先需要用from_json函数把它解析成键值对形式的Map类型。

2. 炸开Map为多行键值对

用explode函数把Map类型的列拆分成多行,每行对应一个键值对,同时保留原id列。

完整代码示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import from_json, explode
from pyspark.sql.types import MapType, StringType

# 创建示例DataFrame
spark = SparkSession.builder.appName("JsonToKV").getOrCreate()
data = [
    ("1", '{"attr1": "value1"}'),
    ("2", '{"attr2": "value2", "attr3": "value3"}')
]
df = spark.createDataFrame(data, ["id", "json"])

# 解析JSON字符串为Map类型
df_parsed = df.withColumn("json_map", from_json(df["json"], MapType(StringType(), StringType())))

# 炸开Map列,生成attr和value列
result_df = df_parsed.select("id", explode("json_map").alias("attr", "value"))

# 查看结果
result_df.show()

执行后会输出目标结构:

+---+-----+------+
| id| attr| value|
+---+-----+------+
|  1|attr1|value1|
|  2|attr2|value2|
|  2|attr3|value3|
+---+-----+------+

如果你的JSON存在嵌套结构或其他数据类型,可以调整from_json的schema参数适配,但针对当前扁平键值对的场景,以上代码完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:45:21