使用整数与十进制值在 Pyspark 中进行过滤

filtering in Pyspark using integer vs decimal values

我正在过滤一个DataFrame,当我传递一个整数值时,它只考虑那些满足DataFrame列值四舍五入为整数时的条件。为什么会这样?请参见下面的屏幕截图,两个过滤器给出不同的结果。我正在使用星火 2.2。我用 python 2.6 和 python 3.5 测试了它。结果是一样的

更新

我用 Spark-SQL 试过了。如果我不将该字段转换为双精度,它会给出与上面第一个相同的答案。但是,如果我在过滤前将该列转换为 double,它会给出正确答案。

lat > 60

给定一个双精度和一个整数,spark 隐式地将它们都转换为整数。结果是合适的,显示纬度 >= 61

对于 lat > cast(60 as double)lat > 60.0 给定两个双打火花 returns 集合 [Infinity, 60.0) 中的所有东西,正如预期的那样

这可能有点un-intuitive,但是你必须记住spark在IntegerType()DoubleType()

之间执行隐式转换

虽然您使用的是 pyspark,但在幕后它是在 Scala 中,最终是 Java。所以Java的转换规则适用于此。

具体来说

https://docs.oracle.com/javase/specs/jls/se10/html/jls-5.html#jls-5.1.3

...Otherwise, if the floating-point number is not an infinity, the floating-point value is rounded to an integer value V, rounding toward zero using IEEE 754 round-toward-zero mode (§4.2.3).