Spark Scala,抓取1列的最大值,但保留所有列



我有一个包含3列(客户,关联,时间戳)的数据框。

我想通过查看时间戳来获取最新的customer

尝试
val rdd = readRdd.select(col("value"))
val val_columns = Seq("value.timestamp").map(x => last(col(x)).alias(x))
rdd.orderBy("value.timestamp")
.groupBy("value.customer")
.agg(val_columns.head, val_columns.tail: _*)
.show()

我相信上面的代码是工作的,但试图找出如何包括所有列(即。协会)。如果我理解正确的话,将其添加到组中意味着我正在获取客户和协会的最新组合,但是我只想从customer列中获取最新的组合,而不是一起查看多个列。

编辑:

我可以加上:

val val_columns = Seq("value.lastRefresh", "value.associations")
.map(x => last(col(x)).alias(x))

好奇的思想。

如果您想通过时间戳列返回最新的客户数据,您可以通过value.timestamp订购数据帧并应用limit(1):

import org.apache.spark.sql.functions._
df.orderBy(desc("value.timestamp")).limit(1).show()

最新更新