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 从 s3 位置读取镶木地板文件的文件夹到 pyspark 数据帧
Pyspark:无法从 SparkFiles 读取镶木地板文件