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

使用PyArrow读取GCS指定分区Parquet文件转Pandas DataFrame报错

解决PyArrow读取GCS指定Parquet分区报错的问题

问题分析

直接传递分区路径列表给pyarrow.dataset.dataset时,因路径格式或分区解析逻辑问题,导致无法正确识别GCS上的有效路径。

解决方案

方法一:根路径+分区过滤(推荐)

利用PyArrow的分区过滤功能,指定数据集根路径后筛选目标分区,更符合PyArrow处理分区数据集的设计逻辑,效率更高且不易出错。

import pyarrow.dataset as ds
import pyarrow.fs as fs
import pandas as pd

# 初始化GCS文件系统(确保已完成GCS认证配置)
gs = fs.GcsFileSystem()

# 指定数据集根路径(不含分区子路径)
root_path = "bucket/Stage/Adapted/MX/Retail/SALES"

# 创建数据集,明确指定Hive风格分区格式
dataset = ds.dataset(
    root_path,
    filesystem=gs,
    format="parquet",
    partitioning="hive"
)

# 筛选需要的fiscal_week分区
filter_expr = ds.field("fiscal_week").isin(["202349", "202350", "202351"])
table = dataset.to_table(filter=filter_expr)

# 转换为Pandas DataFrame
df = table.to_pandas()

方法二:修正路径列表格式

若坚持使用路径列表,需移除路径末尾的斜杠,并明确指定分区格式,让PyArrow正确解析分区信息。

import pyarrow.dataset as ds
import pyarrow.fs as fs
import pandas as pd

gs = fs.GcsFileSystem()

# 移除路径末尾的斜杠,确保路径格式正确
partitioned_paths = [
    'bucket/Stage/Adapted/MX/Retail/SALES/fiscal_week=202349',
    'bucket/Stage/Adapted/MX/Retail/SALES/fiscal_week=202350',
    'bucket/Stage/Adapted/MX/Retail/SALES/fiscal_week=202351'
]

# 创建数据集,指定格式和分区类型
dataset = ds.dataset(
    partitioned_paths,
    filesystem=gs,
    format="parquet",
    partitioning="hive"
)

# 读取数据并转换为DataFrame
table = dataset.to_table()
df = table.to_pandas()

注意事项

  • 确保已完成GCS认证配置(如环境变量设置、服务账号密钥加载等),否则即使路径存在也可能触发权限类的路径找不到错误。
  • 优先使用方法一,因为PyArrow会自动处理分区元数据,无需手动维护路径列表,扩展性更强。

内容的提问来源于stack exchange,提问作者Tom J Muthirenthi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:46:11