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

使用pq.ParquetDataset读取AWS路径报FileNotFoundError求助

可能的原因分析
  • AWS认证机制不匹配:Spark通常会自动适配环境中的AWS认证(比如读取~/.aws/credentials配置、EC2实例IAM角色、EMR集群权限),但PyArrow不会自动继承这些配置。如果你的PyArrow运行环境没设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量,或者使用的IAM角色权限和Spark不一致,就会因权限不足触发文件找不到的错误。

  • 路径格式解析差异:Spark兼容s3://、s3a://、s3n://等多种S3路径前缀,但PyArrow对路径格式的要求更严格。比如你用了s3a://bucket/path这种格式,PyArrow可能无法正确识别,需要换成标准的s3://格式,或者显式指定S3文件系统:

    import pyarrow.parquet as pq
    from pyarrow.fs import S3FileSystem
    
    fs = S3FileSystem(access_key="your_key", secret_key="your_secret")
    dataset = pq.ParquetDataset("bucket/path", filesystem=fs)
    df = dataset.read_pandas()
    
  • 分区与元文件处理逻辑不同:Spark会自动忽略Parquet路径下的_SUCCESS等元文件,且能兼容Spark风格的分区目录命名;但PyArrow的ParquetDataset默认会扫描路径下所有文件,如果遇到这些Spark生成的特殊文件,或者分区目录命名不符合PyArrow的预期,就可能触发找不到有效Parquet文件的错误。

  • 依赖缺失或版本问题:PyArrow读取S3上的Parquet需要依赖s3fs库,如果没安装(pip install s3fs)会导致无法连接S3;另外旧版本的PyArrow对S3的支持存在bug,升级到较新版本(比如>=10.0.0)可能解决问题。

  • 容错机制差异:Spark对缺失文件、空分区有一定容错能力,会自动跳过这些情况;但PyArrow会严格校验每个文件的存在性和可访问性,只要路径下有某个文件无法读取(比如权限不足、文件损坏),就会直接抛出FileNotFoundError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:55:19