【问题标题】:How to do push down predicate on year,month,day partitions如何在年、月、日分区上下推谓词
【发布时间】:2021-07-11 13:09:47
【问题描述】:

我的输入文件是这样分区的

表/年/月/日。

我需要阅读过去 30 天的数据。由于输入数据集很大(跨越 4 年),我如何实现一个下推谓词来过滤最近 30 天的数据。

【问题讨论】:

  • 这些表是像 table/2021/4/5 还是不同的结构?你能添加几个结构的例子吗?

标签: python apache-spark pyspark apache-spark-sql bigdata


【解决方案1】:

由于可以传递目标路径列表,首先我们可以在读取文件之前生成路径。以下是假设输入数据为 parquet 格式的示例代码:

from datetime import datetime, timedelta
start_date=datetime.strptime("2021-01-01", "%Y-%m-%d")
days = 30
paths=[]
for i in range(0, days+1):
    oper_date=start_date - timedelta(days=i)
    path = "table/{year}/{month}/{day}".format(year=oper_date.year, month=oper_date.month, day = oper_date.day)
    paths.append(path)
spark.read.parquet(*paths)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2021-03-30
    • 2020-02-02
    • 1970-01-01
    • 2020-01-28
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多