如何使用Spark获取表中的最新值?

时间:2019-05-31 15:42:02

标签: apache-spark

我有一个如下表:

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窗口功能做到这一点。

1 个答案:

答案 0 :(得分:1)

df.withColumn(
    "num",
    row_number() over Window.partitionBy("person").orderBy(desc("date")))
  .filter($"num" === 1)
  .drop("num")
  .show()