按最大日期和日期范围过滤 pyspark df

Posted

技术标签:

【中文标题】按最大日期和日期范围过滤 pyspark df【英文标题】:filter pyspark df by max date and date range 【发布时间】:2021-04-06 18:59:03 【问题描述】:

我有一个 df,它有一个日期列,还有一些列我想首先从日期列中获取最新的日期(最大(日期))。并且从那个最大日期开始,我想将 df 过滤到仅具有 最大日期前 7 天(包括最大日期)的那些行。

例如,如果最大日期是 2021-01-20。那么,过滤器应该保留日期

2021-01-20(including max date)

2021-01-19

2021-01-18

2021-01-17

2021-01-16

2021-01-15

2021-01-14

并过滤掉其余的日期。 我想根据这个日期范围过滤 enire df。 我正在使用 spark 3.0 (pyspark)

【问题讨论】:

【参考方案1】:

您可以添加最大日期的列,并进行过滤以获取最大日期后 7 天内的行。

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'maxdate', 
    F.max('date').over(Window.orderBy(F.lit(1)))
).filter('date >= maxdate - interval 7 days').drop('maxdate')

【讨论】:

你能解释一下`F.max('date').over(Window.orderBy(F.lit(1)))`这行代码在做什么。想了解这里的概念。 @ritzen101 获取所有行的最大日期。需要一个虚拟窗口(按虚拟列排序)来聚合所有行。

以上是关于按最大日期和日期范围过滤 pyspark df的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中按日期范围过滤记录?

Postgres tsrange,按日期和时间过滤

按名称分组的连续日期范围内的最小和最大日期

Django:按日期范围过滤对象

Python pandas根据日期范围按升序过滤数据

Django按日期范围过滤但不包括年份