[英]Spark SQL change format of the number
show
命令spark后打印以下內容:
+-----------------------+---------------------------+
|NameColumn |NumberColumn |
+-----------------------+---------------------------+
|name |4.3E-5 |
+-----------------------+---------------------------+
有沒有辦法將NumberColumn
格式更改為0.000043
?
你可以使用format_number
函數
import org.apache.spark.sql.functions.format_number
df.withColumn("NumberColumn", format_number($"NumberColumn", 5))
這里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), ",", ""))
因此,
對於大數字,
應刪除逗號 ( ,
)。
您可以使用如下的cast
操作:
val df = sc.parallelize(Seq(0.000043)).toDF("num")
df.createOrReplaceTempView("data")
spark.sql("select CAST (num as DECIMAL(8,6)) from data")
相應地調整精度和比例。
df.createOrReplaceTempView("table")
outDF=sqlContext.sql("select CAST (num as DECIMAL(15,6)) from table")
在這種情況下,6個十進制精度。
在較新版本的pyspark中,您可以使用round()或bround()函數。 這些函數返回一個數字列並用“,”解決問題。
它會是這樣的:
df.withColumn("NumberColumn", bround("NumberColumn",5))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.