在PySpark日期列中获取每年的最新日期

我有一张这样的桌子:

+----------+-------------+
|      date|BAlance_DRAWN|
+----------+-------------+
|2017-01-10| 2.21496454E7|
|2018-01-01| 4.21496454E7|
|2018-01-04| 1.21496454E7|
|2018-01-07| 4.21496454E7|
|2018-01-10| 5.21496454E7|
|2019-01-01| 1.21496454E7|
|2019-01-04| 2.21496454E7|
|2019-01-07| 3.21496454E7|
|2019-01-10| 1.21496454E7|
|2020-01-01| 5.21496454E7|
|2020-01-04| 4.21496454E7|
|2020-01-07| 6.21496454E7|
|2020-01-10| 3.21496454E7|
|2021-01-01| 2.21496454E7|
|2021-01-04| 1.21496454E7|
|2021-01-07| 2.21496454E7|
|2021-01-10| 3.21496454E7|
|2022-01-01| 4.21496454E7|
|2022-01-04| 5.21496454E7|
|2022-01-07|2.209869511E7|
|2022-01-10|3.209869511E7|
+----------+-------------+

有没有一种方法可以过滤此数据帧,所以我得到这样的信息:

+----------+-------------+
|      date|BAlance_DRAWN|
+----------+-------------+
|2017-01-10| 2.21496454E7|
|2018-01-10| 5.21496454E7|
|2019-01-10| 1.21496454E7|
|2020-01-10| 3.21496454E7|
|2021-01-10| 3.21496454E7|
|2022-01-10|3.209869511E7|
+----------+-------------+

即获取每年的最新日期以及相应的BAlance_DRAWN行。

我设法得到它,但是它仅适用于1种情况,并带有以下代码:

df = df.groupby([f.year("date")]).agg(f.last("BAlance_DRAWN"))

但是输出仅是年份:

+----------+-------------+
|      date|BAlance_DRAWN|
+----------+-------------+
|2017      | 2.21496454E7|
|2018      | 5.21496454E7|
|2019      | 1.21496454E7|
|2020      | 3.21496454E7|
|2021      | 3.21496454E7|
|2022      |3.209869511E7|
+----------+-------------+

结果很好,但是我需要使其更加灵活。 (不仅是一年)

更新: 也许可以以某种方式使用max()。 (尝试一下,将会更新)

更新2: 接受的答案做到了!

powerbww 回答:在PySpark日期列中获取每年的最新日期

df = df.withColumn('year',year(df['date']))
       .groupBy(df['year'])
       .agg(max(df['date']),first(df['BALANCE_DRAWN']))
本文链接:https://www.f2er.com/3103698.html

大家都在问