【问题标题】:Select parquet based on partition date根据分区日期选择镶木地板
【发布时间】:2018-02-12 19:45:46
【问题描述】:

我的集群上有一些繁重的日志,我已使用以下分区架构对所有日志进行了拼花:

PARTITION_YEAR=2017/PARTITION_MONTH=07/PARTITION_DAY=12

例如,如果我想选择 2017/07/12 和 2017/08/10 之间的所有日志,有没有办法有效地做到这一点?还是我必须循环一整天才能读取分区?

谢谢,

【问题讨论】:

标签: apache-spark pyspark partitioning parquet


【解决方案1】:

在 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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2016-07-07
    • 2020-12-24
    • 2017-11-11
    相关资源
    最近更新 更多