Spark SQL更改格式的编号

Che*_*rry 10 scala apache-spark apache-spark-sql

show命令火花打印如下:

+-----------------------+---------------------------+
|NameColumn             |NumberColumn               |
+-----------------------+---------------------------+
|name                   |4.3E-5                     |
+-----------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)

有没有办法将NumberColumn格式改为类似的东西0.000043

Ram*_*jan 13

您可以使用format_number 函数作为

import org.apache.spark.sql.functions.format_number
df.withColumn("NumberColumn", format_number($"NumberColumn", 5))
Run Code Online (Sandbox Code Playgroud)

这里5是你想要显示的小数位

正如您在上面的链接中看到的那样,format_number函数返回一个字符串列

format_number(列x,int d)将
数字列x格式化为'#,###,###.##'等格式,舍入到d位小数,并将结果作为字符串列返回.

如果您不需要,,可以调用regexp_replace定义为的函数

regexp_replace(列e,字符串模式,字符串替换)
将与regexp匹配的指定字符串值的所有子字符串替换为rep.

并用它作为

import org.apache.spark.sql.functions.regexp_replace
df.withColumn("NumberColumn", regexp_replace(format_number($"NumberColumn", 5), ",", ""))
Run Code Online (Sandbox Code Playgroud)

因此,应删除大数字的逗号(,).


vde*_*dep 6

您可以使用cast以下操作:

val df = sc.parallelize(Seq(0.000043)).toDF("num")    

df.createOrReplaceTempView("data")
spark.sql("select CAST (num as DECIMAL(8,6)) from data")
Run Code Online (Sandbox Code Playgroud)

相应地调整精度和比例。