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

PySpark如何给JSON类型列新增日期字段并更新列值?

实现方案

核心逻辑是先把JSON字符串解析为Spark可处理的结构化类型,新增字段后再转回JSON字符串即可,完整实现代码如下:

前置依赖导入

from pyspark.sql import functions as F
from pyspark.sql.types import StructType, StructField, StringType

定义原JSON对应的结构

# 需和你JSON中实际存在的字段、类型完全匹配,避免解析丢失数据
json_schema = StructType([
    StructField("application_name", StringType(), nullable=True),
    StructField("dq_test_name", StringType(), nullable=True)
])

核心处理逻辑

# 替换下方的df为你实际的原始表变量名
processed_df = df \
    # 解析JSON字符串为struct结构体
    .withColumn("json_struct", F.from_json(F.col("application_name"), json_schema)) \
    # 为结构体新增date字段,值可按需调整
    .withColumn("json_struct", F.struct(
        F.col("json_struct.*"),
        F.lit("01/001/2020").alias("date")
    )) \
    # 把修改后的结构体转回JSON字符串,覆盖原application_name列
    .withColumn("application_name", F.to_json(F.col("json_struct"))) \
    # 清理临时中间列
    .drop("json_struct")

验证结果

执行以下命令可查看处理后的效果:

processed_df.select("application_name").show(truncate=False)

注意事项

  • 如果原JSON包含更多字段,需要全部补充到json_schema中,匹配对应字段类型
  • date字段如果需要动态取值(比如取当前日期、取表中其他日期字段的值),替换F.lit("01/001/2020")为对应的逻辑即可,比如格式化当前日期为dd/MM/yyyy格式可以写F.date_format(F.current_date(), "dd/MM/yyyy")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:03