我有一个如下表:
date | person | assignment
-----------+--------+-----------
2019-01-01 | joe | blue
2019-02-01 | joe | red
2019-01-01 | mel | green
2019-03-01 | mel | yellow
2019-02-01 | drew | blue
我希望通过Spark查询获得以下结果
latest | person | assignment
-----------+--------+-----------
2019-02-01 | joe | red
2019-03-01 | mel | yellow
2019-02-01 | drew | blue
我知道我可以做person, max(date) latest
,然后再次查询完整列表。但是,有没有一种简便的方法可以通过Spark窗口功能做到这一点。
答案 0 :(得分:1)
df.withColumn(
"num",
row_number() over Window.partitionBy("person").orderBy(desc("date")))
.filter($"num" === 1)
.drop("num")
.show()