numpy - 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
任何的想法?谢谢。
解决方案
特殊值NaN
被视为
大于任何其他数值。
通过Spark 的 nan-semantics,甚至比infinity
.
一种选择是将过滤器更改为
filters = 'px_variation > 0.15 and not isnan(px_variation)'
处理这些NaN
值的另一个选项是用/替换它们:None
null
df.replace(float('nan'), None).filter('px_variation > 0.15')
推荐阅读
- python - 在同一 python 脚本中拟合多个 keras 序列模型的问题
- node.js - 在 NodeJS 中处理错误的最佳方法
- python - 用空格替换numpy数组中的特殊字符
- mysql - 操作获取不起作用。Cgi,拉撒路 IDE
- javascript - 过滤后的可视化树表示
- javascript - 使用 puppeteer 集群的无限循环(故意)
- sql - 我需要查询以排除 Oracle 查询中的特定字母数字模式
- r - 如何将方程应用于考虑到 r 中数据框的其他列的一列?
- azure-web-app-service - Azure 应用服务:设置 max_execution_time
- reactjs - 如何在 NextJS 的 getServerSideProps 函数中从 Axios 获取 API 数据?