繁体   English   中英

如何在 Pyspark 和 Palantir Foundry 中使用多个语句将列的值设置为 0

[英]How do I set value to 0 of column with multiple statements in Pyspark and Palantir Foundry

我试图发表一个声明,基本上说如果EDW_ABC.edw_xdpt_act_arrv_lb为 NULL,则使用EDW_ABC.edw_putt_act_arrv_lb ,如果两者都为 null,则将值设置为 0。我该怎么做? 我正在尝试以下操作,但我知道这是不正确的。

EDW_ABC = EDW_ABC.withColumn('act_arrv_abc_lbs', F.when(
(EDW_ABC.edw_xdpt_act_arrv_lb.isNull() == True) & (EDW_ABC.edw_putt_act_arrv_lb.isNull() == True). F.lit(0)\
                                         .otherwise(EDW_ABC.edw_xdpt_act_arrv_lb.isNull()), EDW_ABC.edw_putt_act_arrv_lb)

你并不需要指定的条件otherwise ,这样

EDW_ABC = EDW_ABC.withColumn(
    'act_arrv_abc_lbs',
    F.when(
        EDW_ABC.edw_xdpt_act_arrv_lb.isNull() & EDW_ABC.edw_putt_act_arrv_lb.isNull(), F.lit(0)
    ).otherwise(
        EDW_ABC.edw_putt_act_arrv_lb
    )
)

whenotherwise操作为ifelse ,因此,如果在第一条件when不被满足,否则自动假设相反。

您将需要使用pyspark.sql.functions.coalesce()函数,该函数返回列表中第一列不返回 NULL 的值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM