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

PySpark如何利用非空列名数组col3生成JSON字符串

解决方案

可以通过动态构建键值对映射的方式,仅借助col3生成目标JSON字符串,核心思路是把col3的列名数组和对应列的值数组转换成Map,再转成JSON。

方法实现(以Spark为例)

Python版本

from pyspark.sql import functions as F

df = df.withColumn(
    "col4",
    F.to_json(
        F.map_from_arrays(
            F.col("col3"),
            F.transform(F.col("col3"), lambda c: F.col(c))
        )
    )
)

Scala版本

import org.apache.spark.sql.functions._

val df = df.withColumn(
    "col4",
    to_json(
        map_from_arrays(
            col("col3"),
            transform(col("col3"), c => col(c.toString))
        )
    )
)

代码说明

  • transform(col3, lambda c: F.col(c)):遍历col3中的每个列名字符串,动态提取对应列的数值,生成一个与col3长度匹配的值数组。
  • map_from_arrays(col3, 值数组):将列名数组和值数组配对,生成一个Map结构(键为列名,值为对应列的内容)。
  • to_json(...):把Map结构转换成标准的JSON字符串。

效果验证

针对你的输入示例,执行后会直接生成期望的col4列:

col4
{"post code" : "5678"}
{"post code": "7877", "addr": "San jose"}

为什么之前的struct方法不适用

struct是静态定义的结构,无法根据每行的col3数组动态调整包含的字段;而map_from_arrays是动态构建键值对,完全贴合每行col3的内容,能精准生成仅包含非空列的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:40:19