获取Apache Spark数据框(Scala)中列的最大值

时间:2020-03-02 23:56:51

标签: apache-spark apache-spark-sql

我试图在一列中获取最大值,并编写了以下代码。

val max = df.withColumn("max", lit(df.agg(max($"id")).as[Int].first))

不幸的是,当我运行它时,出现以下错误:

error: recursive value max needs type
val max = df.withColumn("max", lit(df.agg(max($"id")).as[Int].first))

我真的不明白该错误告诉我什么,也找不到关于此功能的任何文档。我写错了吗?也许有更好的方法可以做到这一点?我一直在尝试获取具体示例,但似乎对我没有任何帮助。

1 个答案:

答案 0 :(得分:0)

在您的代码中,spark max被误认为是scala max,所以我只将max指定为来自spark。

这将为您提供id列的最大值作为整数值:

%scala
import org.apache.spark.sql.functions.col

val max = df.agg(org.apache.spark.sql.functions.max(col("id"))).collect()(0)(0).asInstanceOf[Int]

Output: max: Int = 6

OR

如果要创建列以存储id的最大值:

%scala
import org.apache.spark.sql.functions._
df.withColumn("max", lit(df.agg(org.apache.spark.sql.functions.max($"id")).as[Int].first))