如何在sparksql中舍入十进制

xzlaal3s  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(241)

我有一个scalasparksql,包含以下数据。如何将分数离散化/四舍五入到下面给出的最接近的小数位。因为我没有找到任何预定义的函数。有谁能帮我解决这个问题吗。

49.5 --> from 49.50 to 49.99 
50 ---> 50.0 to 50.49
50.5 --->50.5 to 50.99 
4.5 ---> 4.50 to 4.99
5.0 ---> 5.0 to 5.49
9.5 --> 9.50 to 9.99
10--->10 to 10.49

我要49.50到49.99之间的值为49.5,10到10.49之间的值为10。等等

rkkpypqq

rkkpypqq1#

对任何数字进行四舍五入的更一般的解决方案(我又添加了两行来说明)。

val df2 = df.withColumn("val2", ((col("val") / 0.5).cast("int"))*0.5)

df2.show
+-----+----+
|  val|val2|
+-----+----+
| 49.5|49.5|
|49.99|49.5|
| 50.0|50.0|
|  1.1| 1.0|
|  9.9| 9.5|
| 10.0|10.0|
+-----+----+

对于spark sql:

df.createOrReplaceTempView("df")
spark.sql("select val, int(val / 0.5) * 0.5 as val2 from df").show
+-----+----+
|  val|val2|
+-----+----+
| 49.5|49.5|
|49.99|49.5|
| 50.0|50.0|
|  1.1| 1.0|
|  9.9| 9.5|
| 10.0|10.0|
+-----+----+

相关问题