You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache Beam Python SDK读取按iso_week分区的Parquet文件?

读取分区Parquet文件的解决方案

方法1:用递归通配符直接匹配所有Parquet文件

这是最直接的解决方式,通过**递归遍历所有子目录,精准匹配所有.parquet文件:

import apache_beam as beam

with beam.Pipeline() as pipeline:
    data = (
        pipeline
        | "读取分区Parquet数据" >> beam.io.ReadFromParquet("data_to_read/**/*.parquet")
    )

**会自动遍历data_to_read下所有层级的子目录,*.parquet筛选出目标文件,这样就能一次性读取所有分区里的数据。

方法2:手动提取分区信息并加入数据

如果需要把分区键(比如iso_week)作为字段添加到每条数据中,可结合FileIO实现:

import apache_beam as beam
import re

def read_with_partition(file_metadata):
    # 从文件路径中提取iso_week的值
    match_result = re.search(r'iso_week=([^/]+)', file_metadata.path)
    iso_week = match_result.group(1) if match_result else None
    
    # 读取单个Parquet文件并添加分区字段
    with beam.io.filesystems.FileSystems.open(file_metadata.path) as f:
        reader = beam.io.parquetio.ParquetFileReader(f)
        for record in reader.read_all():
            record['iso_week'] = iso_week
            yield record

with beam.Pipeline() as pipeline:
    data = (
        pipeline
        | "匹配分区目录下的Parquet文件" >> beam.io.FileIO.match("data_to_read/iso_week=*/*.parquet")
        | "读取文件并添加分区信息" >> beam.FlatMap(read_with_partition)
    )

原方法报错原因

你之前用的data_to_read/*匹配的是data_to_read下的一级子目录(即iso_week=2023-W40、iso_week=2023-W41),而非目录内的Parquet文件。ReadFromParquet需要直接指向Parquet文件路径,因此会提示找不到目标文件。

内容的提问来源于stack exchange,提问作者Stefano Castoldi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:02:38