【问题标题】:Filtering on NULL values in a spark dataframe does not work on all columns?过滤火花数据框中的 NULL 值不适用于所有列?
【发布时间】:2026-01-22 01:20:06
【问题描述】:

在写这个问题时,我设法找到了解释。但由于这似乎是一个棘手的问题,我还是会发布它并回答它。随意补充。

在我看来,pyspark 的行为不一致,但由于我对它很陌生,我可能会错过一些东西......我所有的步骤都在 Azure Databricks 笔记本中运行,数据来自托管的镶木地板文件在 Azure Datalake Gen. 2 中。

我想简单地从通过读取 parquet 文件创建的 spark 数据帧中过滤 NULL 记录,步骤如下:

过滤phone 列就可以正常工作:

我们可以看到至少有一些contact_tech_id 值也丢失了。但是在过滤这个特定的列时,会检索到一个空的数据框......

是否有任何解释为什么会发生这种情况,或者我应该寻找什么?

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql databricks azure-databricks


    【解决方案1】:

    过滤contact_tech_id Null 值不成功的原因是因为在笔记本输出的此列中显示为null 实际上是NaNvalue(“不是数字”,请参阅here for更多信息)。

    在转换成 pandas 数据帧时出现,其输出更具可读性:

    【讨论】:

      【解决方案2】:

      为了比较NULL 值是否相等,Spark 提供了一个空安全相等运算符(<=>),当其中一个操作数为 NULL 时返回 False,当两个操作数都为 NULL 时返回 True。而不是使用is null 总是推荐(<=>) 运算符。

      Apache Spark 支持标准比较运算符,例如 >、>=、=、),当其中一个操作数为 NULL 时返回 False,当两个操作数都为 NULL 时返回 True。你可以参考link

      【讨论】:

        最近更新 更多