Scala:如何获取数据框中列的最大值

时间:2019-08-27 10:45:04

标签: scala apache-spark apache-spark-sql

我试图像这样在DataFrame中获取列的聚合值: +----+---+ | v1| v2| +----+---+ |-1.0| 0| | 0.0| 1| | 1.0| 2| |-2.0| 3| +----+---+

我已经尝试过使用spark的agg max函数,但是无法正常工作。

我想获得一个绝对的最大值:例如,在v1列中为-2.0。

3 个答案:

答案 0 :(得分:2)

一种方法是使用“(abs(value),value)”构造一个结构,然后将其最大化,但是使用第二个字段来取回原始值:

df
 .select(
   max(struct(abs($"v1"),$"v1")).as("maxabs")
  )
 .select($"maxabs.v1")
 .show() // or .as[Double].first

答案 1 :(得分:0)

您可以尝试这样的操作。

scala> df.show
+----+---+
|  v1| v2|
+----+---+
|-1.0|  0|
| 0.0|  1|
| 1.0|  2|
|-2.0|  3|
+----+---+


scala> df.join(df.select(max(abs(col("v1"))).as("v3")),abs(col("v1")) === col("v3"),"inner").select(col("v1")).show
+----+
|  v1|
+----+
|-2.0|
+----+

答案 2 :(得分:0)

您也可以这样做,

df.map(r => abs(r.get(0).toString.toDouble)).agg(org.apache.spark.sql.functions.max(col("value"))).show
+----------+
|max(value)|
+----------+
|       2.0|
+----------+