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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:42:44