【问题标题】:Reading parquet files in GCP using wildcards in spark在火花中使用通配符在 GCP 中读取镶木地板文件
【发布时间】:2022-01-20 23:14:33
【问题描述】:

我正在尝试使用 spark 读取 parquet 文件, 如果我想读取 6 月份的数据,我将执行以下操作:

"gs://bucket/Data/year=2021/month=6/file.parquet"

如果我想读取所有月份的数据,我将执行以下操作:

"gs://bucket/Data/year=2021/month=6/file.parquet"

如果我想阅读五月的前两天:

"gs://bucket/Data/year=2021/month=5/day={1,2}file.parquet"

如果我想阅读 11 月和 12 月:

"gs://bucket/Data/year=2021/month={11,12}/file.parquet"

你明白了……但是如果我有一本包含月份、日期键、值对的字典…… 例如{1: [1,2,3], 4: [10,11,12,13]} --> 这意味着我需要从January 读取天数[1,2,3],从April 读取天数[10,11,12,13]。我如何将其反映为路径的通配符。

谢谢

【问题讨论】:

  • 看起来文件夹结构已经分区了,所以我认为你可以用一些过滤器简单地读取整个数据就足够了。过滤器将下推并仅读取该特定分区。

标签: apache-spark google-cloud-platform pyspark wildcard


【解决方案1】:

您可以将路径列表传递给 DataFrameReader:

months_dict = {1: [1, 2, 3], 4: [10, 11, 12, 13]}

paths = [
    f"gs://bucket/Data/year=2021/month={k}/day={{{','.join([str(d) for d in v])}}}/*.parquet"
    for k, v in months_dict.items()
]

print(paths)
# ['gs://bucket/Data/year=2021/month=1/day={1,2,3}/*.parquet', 'gs://bucket/Data/year=2021/month=4/day={10,11,12,13}/*.parquet']

df = spark.read.parquet(*paths)

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 1970-01-01
    • 2019-02-19
    • 2016-01-18
    • 2017-03-17
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多