如何使用 Scala Spark 在 bigDecimal 值后 trim 归零

How to trim zeros after bigDecimal value using Scala Spark

我是 spark scala 的初学者。我试过正则表达式,但它仅用于字符串数据类型。 我希望 Col_2 是小数而不改变精度和小数位数。 有人可以指导我解决这个问题吗?

Col_1 : 字符串

Col_2 : 小数(38,18) -->BigDecimal

    Col_1   Col_2
    ABC     2.000000000
    DEF     2.501000000
    XMN     0.00
    RST     1.28

想要的结果

Col_1 : 字符串 Col_2 : 字符串

    Col_1   Col_2
    ABC     2
    DEF     2.501
    XMN     0
    RST     1.28

您可以使用下面的代码实现此结果,但最好使用其中一种数字格式来保留数字数据。

import spark.implicits._
val inputData = List(("ABC" -> 2.000000000),("DEF" -> 2.501000000),("XMN" -> 0.00),("RST" -> 1.28))
val resultDF = inputData.toDF
  .selectExpr("_1 as Col_1", "regexp_replace(cast(_2 as String), '\.?0+$', '') as Col_2")
resultDF.show

输出

+-----+-----+
|Col_1|Col_2|
+-----+-----+
|  ABC|    2|
|  DEF|2.501|
|  XMN|    0|
|  RST| 1.28|
+-----+-----+