簡體   English   中英

如何在 Pyspark 中獲取 N 個最近的日期

[英]How to get the N most recent dates in Pyspark

有沒有辦法為 Pyspark 中的每組數據獲取最近 30 天的記錄? 在此示例中,獲取 (Grouping, Bucket) 分組內具有最新日期的 2 條記錄。 所以像這樣的桌子

| Grouping | Bucket | Date      |
|----------|--------|-----------|
| 1        | 1      | 9-20-2020 |
| 1        | 1      | 9-16-2020 |
| 1        | 1      | 8-14-2020 |
| 1        | 2      | 9-20-2020 |
| 1        | 2      | 9-16-2020 |
| 1        | 2      | 8-14-2020 |
| 2        | 1      | 9-20-2020 |
| 2        | 1      | 9-16-2020 |
| 2        | 1      | 8-14-2020 |

會變成這樣:

| Grouping | Bucket | Date      |
|----------|--------|-----------|
| 1        | 1      | 9-20-2020 |
| 1        | 1      | 9-16-2020 |
| 1        | 2      | 9-20-2020 |
| 1        | 2      | 9-16-2020 |
| 2        | 1      | 9-20-2020 |
| 2        | 1      | 9-16-2020 |

編輯:我在編輯后查看了我的問題,並意識到一開始不進行編輯是正確的選擇

使用一個窗口並在每個窗口中取前兩個排名

df.withColumn("r", F.rank().over(Window.partitionBy("Grouping", "Bucket") \
                           .orderBy(F.col("Date").desc()))) \
    .filter("r <=2") \
    .drop("r") \
    .show()

輸出:

+--------+------+----------+
|Grouping|Bucket|      Date|
+--------+------+----------+
|       1|     1|2020-09-20|
|       1|     1|2020-09-16|
|       1|     2|2020-09-20|
|       1|     2|2020-09-16|
|       2|     1|2020-09-20|
|       2|     1|2020-09-16|
+--------+------+----------+

編輯:此答案適用於此修訂版(獲取每個組的最新 N 條記錄)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM