Ahn*_*nvi 6 trim decimal apache-spark apache-spark-sql pyspark
我的要求是从十进制值中删除尾随零,我尝试过正则表达式并strip()删除它有效的尾随零,但我们使用正则表达式和 strip 作为字符串数据类型,我想在Col_2不改变精度和小数位数的情况下为十进制。有人可以建议替代方案吗?
样本表:
Col_1:字符串
Col_2:十进制(18,2)
| 列_1 | 列_2 |
|---|---|
| ABC | 2.00 |
| DEF | 2.50 |
| 厦门 | 0.00 |
| 快速恢复时间 | 1.28 |
使用正则表达式的实际结果:
Col_1:字符串
Col_2:字符串
| 列_1 | 列_2 |
|---|---|
| ABC | 2 |
| DEF | 2.5 |
| 厦门 | |
| 快速恢复时间 | 1.28 |
预期结果 :
| 列_1 | 列_2 |
|---|---|
| ABC | 2 |
| DEF | 2.5 |
| 厦门 | 0 |
| 快速恢复时间 | 1.28 |
decimal(18,2)type 将始终存储逗号后面的这2 位数字。在逗号右侧显示尾随零只是一个格式问题。因此,如果您想Col_2采用十进制并保留精度,则将其存储为decimal(18,2)并在显示数据时按照您想要的格式设置。
您可以使用该format_number功能:
import pyspark.sql.functions as F
df.withColumn("Col_2", F.expr("format_number(Col_2, '0.##')")).show()
#+-----+-----+
#|Col_1|Col_2|
#+-----+-----+
#| ABC| 2|
#| DEF| 2.5|
#| XMN| 0|
#| RST| 1.28|
#+-----+-----+
Run Code Online (Sandbox Code Playgroud)