我试图像这样在DataFrame中获取列的聚合值:
+----+---+
| v1| v2|
+----+---+
|-1.0| 0|
| 0.0| 1|
| 1.0| 2|
|-2.0| 3|
+----+---+
我已经尝试过使用spark的agg max函数,但是无法正常工作。
我想获得一个绝对的最大值:例如,在v1列中为-2.0。
答案 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|
+----------+