在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题
Posted
技术标签:
【中文标题】在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题【英文标题】:Issue while converting string data to decimal in proper format in sparksql 【发布时间】:2018-11-29 01:29:59 【问题描述】:我在将string
转换为decimal(15,7)
时遇到spark sql
的问题。
输入数据是:
'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
【问题讨论】:
【参考方案1】:您可以尝试使用 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|
+------+-----------+
【讨论】:
以上是关于在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题的主要内容,如果未能解决你的问题,请参考以下文章