簡體   English   中英

Spark SQL更改格式的編號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM