首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换一列浮点数的巴西货币火花-sql/火种?

如何转换一列浮点数的巴西货币火花-sql/火种?
EN

Stack Overflow用户
提问于 2022-08-04 17:56:55
回答 1查看 122关注 0票数 1

在星星之火-sql或电火花,我必须转换一个巴西货币浮点数。我在做:

代码语言:javascript
复制
data=[('bruce','wayne','1950-01-01','Male',9876543.21)]

columns=["NAME","LASTNAME","DOB","SEX","GOLD"]
df=spark.createDataFrame(data=data,schema=columns)

df= df \
.withColumn("GOLD_STRING",spf.concat(spf.lit("R$ "),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-21,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-21,3),spf.lit('.'))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-18,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-18,3),spf.lit('.'))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-15,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-15,3),spf.lit('.'))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-12,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-12,3),spf.lit('.'))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-9,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-9,3),spf.lit('.'))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-6,3)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-6,3),spf.lit(','))).otherwise(""),
                                    spf.when(spf.substring(df.GOLD.cast("string"),-2,2)!="",spf.concat(spf.substring(df.GOLD.cast("string"),-2,3))).otherwise("00")))
df.show()

结果我得到了:

代码语言:javascript
复制
+-----+--------+----------+----+----------+---------------+
| NAME|LASTNAME|       DOB| SEX|      GOLD|    GOLD_STRING|
+-----+--------+----------+----+----------+---------------+
|bruce|   wayne|1950-01-01|Male|9876543.21|R$ 9.876.543,21|
+-----+--------+----------+----+----------+---------------+

这正是我所需要的,但有没有一种更简单的方法呢?提前感谢!任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 04:24:24

对于数字格式,format_number函数将以'#,###,###.##'格式打印这些数字。尽管这仍然需要使用多个replace替换千和十进制分隔符。

代码语言:javascript
复制
df = df.withColumn("GOLD_STRING", spf.expr("concat('R$ ', replace(replace(replace(format_number(GOLD, 2), '.', ';'), ',', '.'), ';', ','))"))
df.show()

+-----+--------+----------+----+----------+---------------+
| NAME|LASTNAME|       DOB| SEX|      GOLD|    GOLD_STRING|
+-----+--------+----------+----+----------+---------------+
|bruce|   wayne|1950-01-01|Male|9876543.21|R$ 9.876.543,21|
+-----+--------+----------+----+----------+---------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73240390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档