保留两位小数udf scala 不四舍五入
时间: 2023-06-21 12:20:29 浏览: 133
在 Scala 中,可以使用 `udf` 函数和 `BigDecimal` 类来创建一个保留两位小数的自定义函数,并且不进行四舍五入。例如:
```scala
import org.apache.spark.sql.functions.udf
import java.math.RoundingMode
val round2 = udf((num: Double) => BigDecimal.valueOf(num).setScale(2, RoundingMode.DOWN).toDouble)
// 使用示例
val df = Seq((1, 3.14159265), (2, 2.71828)).toDF("id", "num")
df.withColumn("num_rounded", round2($"num")).show()
```
在上面的例子中,`round2` 函数接受一个 `Double` 类型的参数 `num`,将其转换为 `BigDecimal` 类型,并使用 `setScale` 方法保留两位小数并采用向下取整模式,最后将其转换回 `Double` 类型并返回。然后通过 `udf` 函数将 `round2` 函数转换为一个 SparkSQL 中可用的自定义函数。最后使用 `withColumn` 方法将 `num` 列应用 `round2` 函数,并将结果存储到 `num_rounded` 列中,并使用 `show` 方法查看结果。
输出结果类似于:
```
+---+---------+-----------+
| id| num|num_rounded|
+---+---------+-----------+
| 1|3.1415927| 3.14|
| 2| 2.718280| 2.71|
+---+---------+-----------+
```
阅读全文