基于分区的日期选择实木复合地板
问题描述:
我有我的集群上有些沉重的日志,我parqueted所有的人都用下面的分区方案:基于分区的日期选择实木复合地板
PARTITION_YEAR=2017/PARTITION_MONTH=07/PARTITION_DAY=12
例如,如果我要选择我的所有日志2017/07/12和2017/08/10之间有没有办法有效地做到这一点?或者我是否必须逐日循环阅读分区?
感谢,
答
在pyspark加载文件时,您可以使用一些正规表达式:
input_path = "PARTITION_YEAR=2017/PARTITION_MONTH=0{7/PARTITION_DAY={1[2-9],[2-3]*},8/PARTITION_DAY={0[1-9],10}}"
df = spark.read.parquet(input_path)
您还可以生成逗号分隔的路径列表:
input_path = ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=07/PARTITION_DAY=" + str(x) for x in range(12, 32)]) \
+ ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=08/PARTITION_DAY=" + str(x) for x in range(1, 11)])
,或者使用日期:
import datetime as dt
d1 = dt.date(2017,7,12)
d2 = dt.date(2017,8,10)
date_list = [d1 + dt.timedelta(days=x) for x in range(0, (d2 - d1).days + 1)]
input_path = ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=%02d/PARTITION_DAY=%02d" % (d.month, d.day) for d in date_list])
+0
使用日期的解决方案非常酷,谢谢! :) –
https://stackoverflow.com/questions/33650421/reading-dataframe-from-partitioned-parquet-file – pasha701