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

如何用Pandas读取S3目录下所有Parquet文件?遇报错求解

问题:Pandas读取S3目录下Parquet文件抛出FileNotFoundError

根据Pandas官方文档描述,read_parquet支持传入目录路径(如s3://bucket/partition_dir)读取目录下所有Parquet文件,但执行以下代码时却报错FileNotFoundError:

pd.read_parquet(f"s3://my-bucket/data",
                columns=columns,
                storage_options=get_aws_creds_dict())

请问忽略了什么?如何将目录下所有Parquet文件读取为单个DataFrame?

解决方法
  • 检查目录文件结构
    确认s3://my-bucket/data目录下存在直接可读取的Parquet文件(后缀为.parquet/.snappy.parquet等)。如果目录下仅包含分区子目录(如year=2023/month=10/),需确保目录命名符合Parquet分区规范(列名=值格式),Pandas会自动识别分区结构;若目录为多层非分区嵌套,建议用pyarrow.dataset方式读取(见下文)。

  • 验证AWS凭证权限
    确保get_aws_creds_dict()返回的凭证具备目标S3桶及目录的读取权限,包括:

    • s3:ListBucket:允许列出目录下的对象
    • s3:GetObject:允许读取Parquet文件
      可通过AWS CLI命令验证:aws s3 ls s3://my-bucket/data,若能正常列出文件则权限无问题。
  • 指定读取引擎
    Pandas默认自动选择引擎(auto),不同引擎(pyarrow/fastparquet)对S3目录的处理逻辑存在差异。建议显式指定pyarrow引擎尝试:

    pd.read_parquet(f"s3://my-bucket/data",
                    columns=columns,
                    storage_options=get_aws_creds_dict(),
                    engine="pyarrow")
    
  • 处理复杂目录结构
    若目录为多层嵌套或非标准分区结构,可借助pyarrow.dataset构建数据集后转成DataFrame:

    import pyarrow.dataset as ds
    from pyarrow import fs
    
    # 初始化S3文件系统
    s3_fs = fs.S3FileSystem(**get_aws_creds_dict())
    # 构建Parquet数据集
    dataset = ds.dataset("s3://my-bucket/data", format="parquet", filesystem=s3_fs)
    # 读取指定列并转成Pandas DataFrame
    df = dataset.to_table(columns=columns).to_pandas()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:43:30