从目录中读取 spark 分区数据

Reading spark partitioned data from directories

我的数据在 s3 存储桶中按年、月、日分区。我需要读取最近六个月的数据 everyday.I 我正在使用以下代码读取数据,但它在几个月内选择了负值。有没有办法读取最近六个月的正确数据?

from datetime import datetime
d = datetime.now().day
m = datetime.now().month
y = datetime.now().year
df2=spark.read.format("parquet") \
  .option("header","true").option("inferSchema","true") \
  .load("rawdata/data/year={2021,2022}/month={m-6,m}/*")

您可以使用地址(字符串)列表作为您的 .load() 参数。首先,您可以创建向后六个月(从今天开始)的列表:

from datetime import date
from dateutil.relativedelta import relativedelta

y_m_list = [((date.today()+relativedelta(months=-i)).year, (date.today()+relativedelta(months=-i)).month)  for i in range(0,6)]

y_m_list 

输出:

[(2022, 1), (2021, 12), (2021, 11), (2021, 10), (2021, 9), (2021, 8)]

然后将参数创建为

.load([f"rawdata/data/year={x}/month={y}" for x,y in y_m_list])