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

PySpark中整数与小数过滤差异问题排查

关于Spark 2.2中DataFrame整数过滤的匹配异常问题

我在测试Spark 2.2版本时(覆盖Python 2.6和3.5环境),碰到了一个DataFrame过滤的诡异行为:当用整数值作为过滤条件时,Spark并不会严格匹配列的实际数值,而是会匹配该列值取整后满足条件的记录,这直接导致不同过滤方式得到完全不一致的结果。

具体现象

  • 假设DataFrame中有一个double类型的列,当执行df.filter(df['value'] == 1)这类整数条件过滤时,不仅会选中值为1.0的记录,连1.1、1.8这种取整后等于1的数值也会被包含进来,完全不符合我们预期的严格相等匹配。
  • 但如果把过滤条件改成浮点数值(比如df.filter(df['value'] == 1.0)),就能得到仅匹配1.0的正确结果。

Spark-SQL的验证结果

为了确认问题根源,我又用Spark-SQL做了补充测试:

  • 直接执行SELECT * FROM test_table WHERE value = 1时,结果和DataFrame API的整数过滤一致,会把取整后符合条件的记录都拉出来;
  • 但如果先将列显式转换为double类型再过滤,比如SELECT * FROM test_table WHERE CAST(value AS DOUBLE) = 1.0,就能得到严格匹配的正确结果。

解决方案

针对这个Spark 2.2版本的已知问题,有两个可靠的解决思路:

  1. 在DataFrame过滤时,使用与列类型匹配的浮点数值替代整数作为条件,保证类型一致;
  2. 使用Spark-SQL时,要么确保过滤条件的数值类型和列类型对齐,要么显式转换列类型后再执行过滤逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:51:03