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

PySpark当when条件为真时拼接列变量生成指定字符串如何实现?

错误原因

你当前的写法直接将PySpark的Column对象放到Python f-string中做拼接,Python会直接调用Column类的__str__方法,得到的就是你看到的Column<'xxx'>格式的字符串,而不是取每行对应列的实际值来拼接。
另外你代码里拼接时错误引用了s_table字段,你预期输出里拼接的是s_name字段的值,这里也需要修正。

正确代码

from pyspark.sql import functions as f

filters = filters.withColumn(
    "p3",
    f.when(
        (f.col("s_table") == "aaaaaa") & (f.col("t_cast").isNull()),
        f.col("s_name")
    ).when(
        (f.col("s_table") == "aaaaaa") & (f.col("t_cast") == True),
        # 用concat拼接固定字符串和列的实际值
        f.concat(
            f.lit("CAST('"),
            f.col("s_name"),
            f.lit("' AS "),
            f.col("t_d"),
            f.lit(") AS '"),
            f.col("s_name"),
            f.lit("'")
        )
    )
)

所有固定的字符串片段都要用lit()函数包裹转为PySpark的常量列,再和字段列用concat拼接,才能在每行计算时取对应行的字段值完成拼接,完全符合你的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:39:00