使用Polars scan_parquet读取本地部署IBM S3的Hive分区Parquet文件时遇Generic S3错误的排查求助
Polars scan_parquet读取本地部署IBM S3的Hive分区Parquet文件时遇Generic S3错误的排查求助
各位好,我最近在使用Polars读取本地部署的IBM S3上的Hive分区Parquet文件时碰到了一个棘手的Generic S3错误,折腾了好一阵都没解决,想过来求助大家。
错误详情
[PolarsObjectStore]: got error: Generic S3 error: Error performing list request: Error after 2 retries in *ms, mex_retries:2, retry_timeout:10s, source:error sending request for url(https://s3host/bucket?llist-type=2&prefix=root_pth)
我先后试过Polars 1.14和1.20两个版本,问题都复现了。
已尝试的排查步骤
- 一开始怀疑Polars是通过反向代理访问S3端点,于是清空了所有可能的代理相关环境变量,但问题依旧
- 用boto3直接访问目标Parquet文件是完全正常的,说明S3的权限、连接本身没有问题
- 换到没有反向代理的集群上测试,还是出现一模一样的错误
想请教的问题
- 有没有前辈遇到过类似的问题?
- 怎么才能查看这个Generic错误的更详细日志信息?有没有办法通过Polars的功能来实现?
- 任何关于解决或进一步排查这个问题的建议,都非常感谢!
代码片段
storage_options={"aws_access_key_id":***,"aws_secret_access_key":****, "endpoing_url":"https//hostname"} source_path='s3//bucket/root_path_of_partitioned_data/*/*.parquet' # data is partitioned on date column lazy_f=pl.scan_parquet(source=source_path,storage_options=storage_options,hive_partitioning=True) filtered_lf=lazy_f.filter(predicate) filtered_lf.collect()
另外注意到代码里的storage_options有个明显的拼写错误:endpoing_url应该是endpoint_url,这个低级错误可能直接导致Polars无法正确识别S3端点地址,建议先修正这个拼写再测试看看。
备注:内容来源于stack exchange,提问作者EE49
相关产品推荐
相关产品推荐

