我有一个包含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()