在SparkSQL中以正确格式将字符串数据转换为十进制时出现问题

时间:2018-11-29 01:29:59

标签: sql apache-spark hive pyspark

spark sql转换为string时,我在decimal(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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用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|
+------+-----------+