如何用Polars读取AWS S3中Parquet文件?遇403权限问题求助
解决Polars读取S3 Parquet文件的403权限错误及凭证使用问题
先修正代码中的语法错误
你编写的storage_options字典存在明显语法问题:'aws_region': 'us-east-1' credentials这一行末尾多写了credentials,导致字典结构无效,这是引发问题的直接原因之一。
Polars支持直接通过AWS_PROFILE读取本地凭证
Polars完全支持读取本地AWS配置文件中的凭证,和Pandas逻辑一致,不需要手动通过boto3获取凭证再传入。只需确保AWS_PROFILE环境变量已正确设置,即可直接读取S3文件:
import polars as pl import os # 若系统环境变量未设置AWS_PROFILE,可在此手动指定 # os.environ["AWS_PROFILE"] = "你的配置文件中的profile名称" s3_path = "s3://bucket/path/file.parquet" df = pl.scan_parquet(s3_path)
手动传递凭证的正确方式
如果确实需要手动指定凭证,除了修正语法错误,还要注意临时凭证需要额外传入session token(很多场景下AWS会返回临时凭证,比如使用角色权限时),否则会触发403权限错误:
import boto3 import polars as pl import os session = boto3.Session(profile_name=os.environ["AWS_PROFILE"]) credentials = session.get_credentials() current_credentials = credentials.get_frozen_credentials() s3_path = "s3://bucket/path/file.parquet" storage_options = { 'aws_access_key_id': current_credentials.access_key, 'aws_secret_access_key': current_credentials.secret_key, 'aws_region': 'us-east-1' } # 临时凭证必须添加session token字段 if current_credentials.token: storage_options['aws_session_token'] = current_credentials.token df = pl.scan_parquet(s3_path, storage_options=storage_options)
为什么Pandas能成功而Polars初始代码失败?
Pandas在处理S3凭证时会自动读取完整的凭证信息(包括session token),而你初始的Polars代码不仅有语法错误,还可能缺失了session token字段,导致权限验证失败,返回403 Forbidden错误。
内容的提问来源于stack exchange,提问作者DataJack
相关产品推荐
相关产品推荐

