首页 > 解决方案 > sparkSQL 过滤器功能不适用于 NaN

问题描述

早上好,

我有以下变量。

self.filters = 'px_variation > 0.15'
df 

如果我做 df.collect() 我得到了。

Row(px_variation=nan, subject_code='1010', list_tr_id=['X0', 'X1'], list_quantity=[3000.0, 1.0], list_cash_qty=[16500.0, 5.5])

我尝试应用以下功能

df.filter(self.filters)

它的结果是。

Row(px_variation=nan, subject_code='1010', list_tr_id=['X0', 'X1'], list_quantity=[3000.0, 1.0], list_cash_qty=[16500.0, 5.5])

如您所见,我的 DF 上的 px_variation 是一个 numpy.nan 但在应用过滤器功能后它不会过滤它。为什么 spark sql 不忽略 nan 或使用它来过滤?

如果我执行相同的操作,但在 python 中,结果符合预期。

df.collect()[0].px_variation > 0.15 -> Result: False

任何的想法?谢谢。

标签: numpyapache-spark

解决方案


特殊值NaN被视为

大于任何其他数值。

通过Spark 的 nan-semantics,甚至比infinity.

一种选择是将过滤器更改为

filters = 'px_variation > 0.15 and not isnan(px_variation)'

处理这些NaN值的另一个选项是用/替换它们:Nonenull

df.replace(float('nan'), None).filter('px_variation > 0.15')

推荐阅读