sql - 在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题
问题描述
我在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
解决方案
您可以尝试使用 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|
+------+-----------+
推荐阅读
- python - Python中的单(状态)对多(排放)隐马尔可夫模型
- powershell - 确认subOU是否已经存在?
- flutter - Cloud Firestore 写入数据不一致 (Flutter)
- java - jBox2D 球在快速撞击地面时由于摩擦而在 x 轴停止
- python - 根据某些条件插入行,填写数据
- mysql - 仅在第一次尝试时 Wordpress“建立数据库连接时出错”
- reactjs - 如何在不使用上下文 api 或 redux 的情况下在 react js 中的 2 个独立组件之间发送数据
- powerbi - 如何在 Power BI 中插入日期
- r - 从 R 表中的 2 列创建一个新的百分比变化列
- node.js - 无服务器 lamdas 使用缓存的处理程序代码,但观察者检测到更改并重新编译。怎么修?