在列表达式中处理 Pyspark 中的 NULL 值

Posted

技术标签:

【中文标题】在列表达式中处理 Pyspark 中的 NULL 值【英文标题】:Handling NULL values in Pyspark in Column expression 【发布时间】:2020-07-02 11:11:12 【问题描述】:

我一直在为 pyspark 中的一个问题而摸不着头脑。

我想根据列是否为 NULL 有条件地应用 UDF。一个限制是我无法访问我正在编写代码的位置的 DataFrame,我只能访问一个列对象。

因此,我不能简单地这样做:

df.where(my_col.isNull()).select(my_udf(my_col)).toPandas()

因此,我只能访问 Column 对象,我正在编写以下内容:

my_res_col = F.when(my_col.isNull(), F.lit(0.0) \
              .otherwise(my_udf(my_col))

然后再做:

df.select(my_res_col).toPandas()

不幸的是,由于某种我不知道的原因,我仍然在我的 UDF 中收到 NULL,迫使我直接在我的 UDF 中检查 NULL 值。

我不明白为什么 isNull() 没有阻止具有 NULL 值的行调用 UDF。

非常感谢您对此事的任何见解。

提前感谢您的帮助。

安东尼

【问题讨论】:

您有没有尝试过解决方案? 【参考方案1】:

我不确定您的数据。它包含nan吗? spark 处理 null 和 nan 的方式不同。 Differences between null and NaN in spark? How to deal with it?

那么你可以试试下面的方法并检查它是否解决了

import pyspark.sql.functions as F
my_res_col = F.when(((my_col.isNull())|(F.isnan(mycol))), F.lit(0.0)).otherwise(my_udf(my_col))

【讨论】:

以上是关于在列表达式中处理 Pyspark 中的 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章

分解表以在列中进行透视(SQL,PYSPARK)

PySpark:如何在列中使用 Or 进行分组

计算 PySpark SQL Join 中每个不同值在列中出现的次数

pyspark 在列上应用函数

PySpark:在联接中处理 NULL

Pyspark:在列和索引上排名()?