pyspark 使用动态日期范围读取镶木地板文件分区数据

Posted

技术标签:

【中文标题】pyspark 使用动态日期范围读取镶木地板文件分区数据【英文标题】:pyspark reading parquet files partitioned data using Dynamic Date Ranges 【发布时间】:2021-08-18 22:04:57 【问题描述】:

我的数据集如下:

year=yyyy
 |---month=mm
 |   |---day=dd
 |   |   |---<parquet-files>

我使用以下方法以静态方式处理今天和明天的数据:

   (year = year(current_date()) and month = month(current_date()) and day = 
   dayofmonth(current_date())) or 
   (year = year(date_sub(current_date(), 1)) and month = month(date_sub(current_date(), 1)) and 
   day = dayofmonth(date_sub(current_date(), 1)))

但是,我需要将日期范围从今天拉到 X 天。我已经尝试过(过滤器中的Dateiff,但这不适用于镶木地板文件)。

   DateDiff(current_date(),to_date(concat(year,'-',month,'-', day))) <= %s
   and
   DateDiff(current_date(),to_date(concat(year,'-',month,'-', day))) >= 0

我想知道这是否可能以及可能的解决方案是什么? 谢谢

【问题讨论】:

【参考方案1】:

以下就可以了

from datetime import date, timedelta

X = 5
today = date.today()
dates = [today-timedelta(days=x) for x in range(X)]

table_path = "hdfs:///path/to/parquet/table/year=year/month=month/day=day/*"

paths = [table_path.format(year=date.year, month=date.month, day=date.day) for date in dates]

df = spark.read.format("parquet").load(paths)

【讨论】:

以上是关于pyspark 使用动态日期范围读取镶木地板文件分区数据的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 中为镶木地板文件过滤日期时间范围和时区

使用 pyspark 比较镶木地板文件的元数据

使用 pyspark 从 s3 位置读取镶木地板文件的文件夹到 pyspark 数据帧

Pyspark:无法从 SparkFiles 读取镶木地板文件

如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?

无法使用 Pyspark 2.4.4 读取 s3 存储桶中的镶木地板文件