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

Geopandas读取S3 Parquet文件遇ACCESS_DENIED问题求助

问题描述

将本地创建的GeoDataFrame对应的Parquet文件上传至S3后,在AWS Glue中执行以下代码尝试用geopandas读取:

import geopandas as gpd
test_gdf = gpd.read_parquet("s3://bucket_name/key/file.parquet")

触发如下权限错误:

OSError: When getting information for key 'key/file.parquet' in bucket 'bucket_name': AWS Error ACCESS_DENIED during HeadObject operation: No response body.

但使用pandas的read_parquet方法却能成功读取:

import pandas as pd
test_gdf = pd.read_parquet("s3://bucket_name/key/file.parquet")

由于将pandas读取结果转回GeoDataFrame耗时极长,希望直接用geopandas读取。已检查IAM角色权限(配置了s3:*操作允许)和S3桶策略,求可行解决方法。

解决方法
  • 显式指定S3存储选项
    geopandas底层的文件访问库可能未自动获取Glue角色的凭证,可通过s3fs显式初始化文件系统后传入:

    import geopandas as gpd
    from s3fs import S3FileSystem
    
    s3 = S3FileSystem(anon=False)
    test_gdf = gpd.read_parquet("s3://bucket_name/key/file.parquet", storage_options={"s3": s3})
    

    也可直接指定区域参数适配Glue环境:

    test_gdf = gpd.read_parquet(
        "s3://bucket_name/key/file.parquet",
        storage_options={"client_kwargs": {"region_name": "你的AWS区域"}}
    )
    
  • 统一读取引擎
    指定和pandas相同的pyarrow引擎,避免底层实现差异导致的权限逻辑问题:

    test_gdf = gpd.read_parquet("s3://bucket_name/key/file.parquet", engine="pyarrow")
    
  • 升级依赖版本
    AWS Glue默认的pyarrow、fsspec版本可能和geopandas不兼容,导致S3访问异常。可在Glue作业的参数中添加额外依赖包:

    --additional-python-modules geopandas==0.14.0,pyarrow==14.0.0,fsspec==2023.10.0
    

    版本号可根据实际兼容情况调整。

  • 确认本地导出格式
    本地导出GeoDataFrame到Parquet时,使用pyarrow引擎确保几何列符合GeoParquet规范,避免读取时的额外处理:

    gdf.to_parquet("本地文件.parquet", engine="pyarrow")
    

内容的提问来源于stack exchange,提问作者Gi Yeon Shin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:46:36