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

SparkSQL中filter函数对NaN值过滤不生效问题咨询

Spark SQL filter 未过滤 NaN 行的原因及解决方案

核心原因

该现象是Spark SQL和Python原生对NaN的比较规则差异导致的,不属于BUG:

  • Python(含numpy)中,任意数值和np.nan做比较都会返回False,符合你本地测试的结果
  • Spark SQL为了兼容排序场景下的NaN处理,自定义了NaN的比较逻辑:
    • 所有非NaN的数值都小于NaN
    • NaN和NaN判断相等
      因此你的过滤条件px_variation > 0.15中,NaN和0.15比较的结果为TRUE,会被filter操作保留。

解决方案

如果需要过滤掉NaN行,需要在逻辑中显式排除NaN值,有两种常用实现方式:

  1. 直接修改过滤条件,加入内置isnan()判断:
self.filters = 'px_variation > 0.15 AND NOT isnan(px_variation)'
df.filter(self.filters)
  1. 先丢弃目标列含NaN的行再执行过滤:
df.na.drop(subset=['px_variation']).filter(self.filters)

注意:如果需要同时排除NULL值,可以额外补充px_variation IS NOT NULL的判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:57:03