如何使用 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|
+-----+-----+
我是 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|
+-----+-----+