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

PySpark使用lit()添加字典至DataFrame报错求助

问题解决:将Python字典作为新列添加到Spark DataFrame

问题场景

我有如下Python字典:

cam = {"emp_id":1234, "emp_acct": [6784, 8901], "start_date":"2002-05-06"}

尝试用以下代码将其作为新列添加到已有DataFrame:

df = input_df.withColumn("cam_details", lit(cam))

但报错提示lit()仅接受字符串类型。

解决方法

Spark的lit()函数仅支持简单数据类型(如字符串、数字等),无法直接传入Python字典。要添加包含复杂结构的列,需使用Spark内置函数构建对应的数据结构:

方法1:构建结构体(Struct)类型列

如果需要将字典的每个键作为结构体的字段:

from pyspark.sql.functions import struct, lit

df = input_df.withColumn(
    "cam_details",
    struct(
        lit(1234).alias("emp_id"),
        lit([6784, 8901]).alias("emp_acct"),
        lit("2002-05-06").alias("start_date")
    )
)

方法2:构建Map类型列

如果希望将字典以键值对Map的形式存储:

from pyspark.sql.functions import create_map, lit
from itertools import chain

# 将字典键值对转换为Spark可识别的参数序列
map_entries = list(chain(*[(lit(k), lit(v)) for k, v in cam.items()]))
df = input_df.withColumn("cam_details", create_map(*map_entries))

方法3:转为JSON字符串存储(适合仅需保存内容的场景)

如果不需要对该列进行结构化操作,可先将字典转为JSON字符串:

import json
from pyspark.sql.functions import lit

cam_json = json.dumps(cam)
df = input_df.withColumn("cam_details", lit(cam_json))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:48:21