Spark sql 圆形和圆形

Hac*_*lic 5 scala apache-spark apache-spark-sql

我很困惑 round 和 bround 在 Spark sql 中是如何工作的。

scala> spark.sql("select round(1.5, 0), bround(1.5, 0)").show()
+-------------+--------------+
|round(1.5, 0)|bround(1.5, 0)|
+-------------+--------------+
|            2|             2|
+-------------+--------------+


scala> spark.sql("select round(2.5, 0), bround(2.5, 0)").show()
+-------------+--------------+
|round(2.5, 0)|bround(2.5, 0)|
+-------------+--------------+
|            3|             2|
+-------------+--------------+


scala> spark.sql("select round(3.5, 0), bround(3.5, 0)").show()
+-------------+--------------+
|round(3.5, 0)|bround(3.5, 0)|
+-------------+--------------+
|            4|             4|
+-------------+--------------+
Run Code Online (Sandbox Code Playgroud)

Qui*_*ver 8

  1. 圆形的

舍入模式向{@literal“最近邻居”}舍入,除非两个邻居等距,在这种情况下向上舍入。RoundingMode.UP如果丢弃的分数 > 0.5,则行为与 {@code } 相同;否则,其行为与 {@code RoundingMode.DOWN} 相同。请注意,这是学校通常教授的舍入模式。

例子 :

input=5.5 output=6
input=2.5 output=3
input=1.6 output=2
input=1.1 output=1
input=1.0 output=1
input=-1.0 output=-1
input=-1.1 output=-1
input=-1.6 output=-2
input=-2.5 output=-3
input=-5.5 output=-6
Run Code Online (Sandbox Code Playgroud)
  1. 布朗德

舍入模式向{@literal“最近邻居”}舍入,除非两个邻居等距,在这种情况下,向偶数邻居舍入。RoundingMode.HALF_UP如果丢弃的分数左边的数字是奇数,则行为与 {@code } 相同;如果它是偶数,则其行为与 {@code RoundingMode.HALF_DOWN} 相同。请注意,这是一种舍入模式,当在一系列计算中重复应用时,它可以在统计上最小化累积误差。它有时被称为{@literal“银行家四舍五入”},主要在美国使用。这种舍入模式类似于 Java 中用于 {@code float} 和 {@code double} 算术的舍入策略。

例子

    input=5.5 output=6
    input=2.5 output=2
    input=1.6 output=2
    input=1.1 output=1
    input=1.0 output=1
    input=-1.0 output=-1
    input=-1.1 output=-1
    input=-1.6 output=-2
    input=-2.5 output=-2
    input=-5.5 output=-6
Run Code Online (Sandbox Code Playgroud)