簡體   English   中英

如何格式化Spark DataFrame中的列

[英]How to format a column in Spark DataFrame

有一個Spark DataFrame調用df,如下所示:

+---+---+
| c1| c2|
+---+---+
|  1|  6|
|  2|  7|
|  3|  8|
|  4|  9|
|  5| 10|
|  6| 11|
|  7| 12|
|  8| 13|
|  9| 14|
+---+---+

而且我想生成一個新的DataFrame來獲取c1和c2的分數,結果應該是這樣的:

+---+---+------+
| c1| c2|    c3|
+---+---+------+
|  9| 14|0.6429|
|  8| 13|0.6154|
|  7| 12|0.5833|
|  6| 11|0.5455|
|  5| 10|0.5000|
|  4|  9|0.4444|
|  3|  8|0.3750|
|  2|  7|0.2857|
|  1|  6|0.1667|
+---+---+------+

但是,當我使用代碼時

res.withColumn("c3", col("c1")/col("c2")).orderBy(col("c3").desc).show()

我有:

+---+---+-------------------+
| c1| c2|                 c3|
+---+---+-------------------+
|  9| 14| 0.6428571428571429|
|  8| 13| 0.6153846153846154|
|  7| 12| 0.5833333333333334|
|  6| 11| 0.5454545454545454|
|  5| 10|                0.5|
|  4|  9| 0.4444444444444444|
|  3|  8|              0.375|
|  2|  7| 0.2857142857142857|
|  1|  6|0.16666666666666666|
+---+---+-------------------+

如何在無需生成另一個DataFrame的情況下將c3格式化為所需格式? (我想只用一行代碼從df中獲得結果,我怎么能做到這一點?)

您可以使用format_number函數作為

import org.apache.spark.sql.functions._
res.withColumn("c3", format_number(col("c1")/col("c2"), 4)).orderBy(col("c3").desc).show()

另外,您也可以將結果轉換為正確的DecimalType()

import org.apache.spark.sql.functions.{col}
import org.apache.spark.sql.types._                                                                   

res.withColumn("c3", (col("c1")/col("c2"))
   .cast(DecimalType(4,4)))
   .orderBy(col("c3").desc).show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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