我正在过滤DataFrame,当我传递一个整数值时,它只考虑那些满足条件的数据,当DataFrame列值被舍入为整数时。为什么会这样?请参见下面的屏幕截图,两个过滤器给出不同的结果。我正在使用Spark 2.2。我用python 2.6和python 3.5测试了它。结果是一样的。
我用Spark-SQL尝试过它。如果我没有将字段转换为double,它会给出与上面第一个相同的答案。但是,如果我在过滤之前将列转换为double,则会给出正确的答案。
答案 0 :(得分:3)
lat > 60
的
给定一个double和一个整数spark会隐式地将它们转换为整数。结果是合适的,显示纬度> = 61 适用于 这可能稍微不直观,但您必须记住,火花正在执行lat > cast(60 as double)
或lat > 60.0
给定两个双倍的spark会返回集合[Infinity,60.0]中的所有内容,如预期的那样IntegerType()
和DoubleType()
答案 1 :(得分:1)
虽然你使用了pyspark,但它在Scala中最终是Java。所以Java的转换规则适用于此。
具体
https://docs.oracle.com/javase/specs/jls/se10/html/jls-5.html#jls-5.1.3
...否则,如果浮点数不是无穷大,浮点值将四舍五入为整数值V,使用IEEE 754舍入为零的模式舍入为零(§4.2.3) 。