在 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 中以正确格式将字符串数据转换为十进制时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在 sparksql 中将日期从字符串转换为日期

在 SQL Server 中以日期时间格式转换日期时间字符串

在 Java 中以不同的格式将字符串解析为日期

如何将时间字符串转换为自定义日期格式?

将字符串转换为日期 SparkSQL

SparkSQL + Java:使用数据集时将 Pojo 转换为表格格式