在 spark 中使用通配符读取 GCP 中的镶木地板文件
Reading parquet files in GCP using wildcards in spark
我正在尝试使用 spark 读取镶木地板文件,
如果我想读取 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]
天。我如何将其反映为路径的通配符。
谢谢
您可以将路径列表传递给 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)
我正在尝试使用 spark 读取镶木地板文件, 如果我想读取 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]
天。我如何将其反映为路径的通配符。
谢谢
您可以将路径列表传递给 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)