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

Pyspark和Palantir Foundry中多条件设置列值为0的实现方法

问题分析

你提供的代码存在几处明显错误:

  • 语法错误:第一个when的条件判断结束后误用了.而非逗号分隔返回值
  • 逻辑顺序错误:没有按照需求的优先级做判断
  • 参数错误:otherwise中错误传入判断表达式EDW_ABC.edw_xdpt_act_arrv_lb.isNull(),而非实际要返回的列值
正确实现

提供两种可直接运行的实现方案:

方案1:嵌套when写法(逻辑和需求完全对应,可读性高)

from pyspark.sql import functions as F

EDW_ABC = EDW_ABC.withColumn(
    'act_arrv_abc_lbs',
    # 第一列非空时直接取第一列值
    F.when(EDW_ABC.edw_xdpt_act_arrv_lb.isNotNull(), EDW_ABC.edw_xdpt_act_arrv_lb)
    # 第一列为空时取第二列值
    .when(EDW_ABC.edw_putt_act_arrv_lb.isNotNull(), EDW_ABC.edw_putt_act_arrv_lb)
    # 两列都为空时返回0
    .otherwise(F.lit(0))
)

方案2:coalesce简化写法(代码更简洁,性能和方案1一致)

coalesce函数会返回参数列表中第一个非空的值,刚好匹配需求的优先级逻辑:

from pyspark.sql import functions as F

EDW_ABC = EDW_ABC.withColumn(
    'act_arrv_abc_lbs',
    F.coalesce(
        EDW_ABC.edw_xdpt_act_arrv_lb,
        EDW_ABC.edw_putt_act_arrv_lb,
        F.lit(0)
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:03