Spark SQL更改格式的编号

时间:2017-07-10 08:51:28

标签: scala apache-spark apache-spark-sql

show命令后,spark打印出以下内容:

+-----------------------+---------------------------+
|NameColumn             |NumberColumn               |
+-----------------------+---------------------------+
|name                   |4.3E-5                     |
+-----------------------+---------------------------+

有没有办法将NumberColumn格式更改为0.000043

4 个答案:

答案 0 :(得分:12)

您可以使用format_number function作为

import org.apache.spark.sql.functions.format_number
df.withColumn("NumberColumn", format_number($"NumberColumn", 5))

此处5是您要显示的小数位数

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

  

format_number(第x列,第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), ",", ""))

因此,逗号,)应删除大数字。

答案 1 :(得分:4)

您可以使用SELECT ROUND(6353 * 2 * ASIN(SQRT( POWER(SIN((3.1412 - abs(1.2897)) * pi()/180 / 2),2) + COS(3.1412 * pi()/180 ) * COS( abs(1.2897) * pi()/180) * POWER(SIN((101.6865 - 103.8501) * pi()/180 / 2), 2) )), 2); 操作,如下所示:

cast

相应地调整精度和比例。

答案 2 :(得分:0)

df.createOrReplaceTempView("table")
outDF=sqlContext.sql("select CAST (num as DECIMAL(15,6)) from table")
在这种情况下,

6个十进制精度。

答案 3 :(得分:0)

在较新版本的pyspark中,可以使用round()或bround()函数。 这些函数返回一个数字列,并使用“,”解决问题。

那将是:

df.withColumn("NumberColumn", bround("NumberColumn",5))