在列表达式中处理 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 值的主要内容,如果未能解决你的问题,请参考以下文章