首页 > 解决方案 > 在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题

问题描述

我在spark sql转换stringdecimal(15,7).

输入数据为:

'0.00'
'28.12'
'-39.02'
'28.00'

我尝试将其转换为float然后再转换为decimal但得到了意想不到的结果。

sqlContext.sql("select cast(cast('0.00' as float) as decimal(15,7)) from table").show()

我收到的结果如下

0

但我需要以下格式的数据:

0.0000000
28.1200000
-39.0200000
28.0000000

标签: sqlapache-sparkhivepyspark

解决方案


您可以尝试使用 format_number 方法。像这样的东西。

df.withColumn("num", format_number(col("value").cast("decimal(15,7)"), 7)).show()

结果应该是这样的。

+------+-----------+
| value|        num|
+------+-----------+
|  0.00|  0.0000000|
| 28.12| 28.1200000|
|-39.02|-39.0200000|
| 28.00| 28.0000000|
+------+-----------+

推荐阅读