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

使用PySpark移除嵌套JSON对象数组(empval)中的id字段

问题

需要使用PySpark移除嵌套JSON键值对对象数组(empval字段)中的id字段。

输入数据集

+----------+--------+----------------------------------------------------------------------------------------------------------+
| empno    | empcode| empval                                                                                                   |
+----------+--------+----------------------------------------------------------------------------------------------------------+
| employee1| 100DRE | [{"id": "123", "key1": "value1", "key2": "value2"}, {"id": "234", "key1": "te", "key2": "value2"}, {"id": "345", "key1": "grtregert", "key2": "value2"}] |
+----------+--------+----------------------------------------------------------------------------------------------------------+

预期输出

+----------+--------+---------------------------------------------------------------------------------------------------------------------+
| empno    | empcode| newColumn                                                                                                           |
+----------+--------+---------------------------------------------------------------------------------------------------------------------+
| employee1| 100DRE | [{"key1": "value1", "key2": "value2"}, {"key1": "te", "key2": "value2"}, {"key1": "grtregert", "key2": "value2"}]|
+----------+--------+---------------------------------------------------------------------------------------------------------------------+

解决方案

利用PySpark的transform函数遍历数组内的每个JSON对象,通过drop方法移除id字段,生成目标列。

完整代码示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import transform, col

# 初始化Spark会话
spark = SparkSession.builder.appName("RemoveIdFromNestedArray").getOrCreate()

# 构造输入数据集
input_data = [
    ("employee1", "100DRE", [
        {"id": "123", "key1": "value1", "key2": "value2"},
        {"id": "234", "key1": "te", "key2": "value2"},
        {"id": "345", "key1": "grtregert", "key2": "value2"}
    ])
]
df = spark.createDataFrame(input_data, schema=["empno", "empcode", "empval"])

# 处理数组字段,移除每个对象的id键
result_df = df.withColumn(
    "newColumn",
    transform(col("empval"), lambda obj: obj.drop("id"))
).drop("empval")

# 打印结果
result_df.show(truncate=False)

关键逻辑说明

  • transform(col("empval"), lambda obj: obj.drop("id")):对empval数组中的每个JSON对象执行drop("id")操作,剔除指定字段。
  • drop("empval"):可选操作,用于移除原数组字段,仅保留处理后的newColumn。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:54:51