Scala 如何在Spark DataFrame中格式化列

Scala 如何在Spark DataFrame中格式化列,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,使用Spark数据帧调用df,如下所示: +---+---+ | c1| c2| +---+---+ | 1| 6| | 2| 7| | 3| 8| | 4| 9| | 5| 10| | 6| 11| | 7| 12| | 8| 13| | 9| 14| +---+---+ +---+---+------+ | c1| c2| c3| +---+---+------+ | 9| 14|0.6429| | 8| 13|0.6154| | 7| 12|0.58

使用Spark数据帧调用df,如下所示:

+---+---+
| c1| c2|
+---+---+
|  1|  6|
|  2|  7|
|  3|  8|
|  4|  9|
|  5| 10|
|  6| 11|
|  7| 12|
|  8| 13|
|  9| 14|
+---+---+
+---+---+------+
| 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|
+---+---+------+
我想生成一个新的数据帧来得到c1和c2的分数,结果应该是这样的:

+---+---+
| c1| c2|
+---+---+
|  1|  6|
|  2|  7|
|  3|  8|
|  4|  9|
|  5| 10|
|  6| 11|
|  7| 12|
|  8| 13|
|  9| 14|
+---+---+
+---+---+------+
| 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|
+---+---+-------------------+
如何将c3格式化为所需格式而不必生成另一个数据帧?(我只想在一行代码中获得df的结果,如何实现这一点?

您可以将函数用作

import org.apache.spark.sql.functions._
res.withColumn("c3", format_number(col("c1")/col("c2"), 4)).orderBy(col("c3").desc).show()
您可以将函数用作

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

或者,您也可以将结果强制转换为正确的
DecimalType()


或者,您也可以将结果强制转换为正确的
DecimalType()