show
命令后,spark打印出以下内容:
+-----------------------+---------------------------+
|NameColumn |NumberColumn |
+-----------------------+---------------------------+
|name |4.3E-5 |
+-----------------------+---------------------------+
有没有办法将NumberColumn
格式更改为0.000043
?
答案 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))