Polars在S3上使用scan_parquet/scan_pyarrow_dataset无法实现流式连接
Polars流式连接S3分区Parquet数据集时无法下推谓词,全量加载内存
问题背景
我有一个存储在S3上的大型分区Parquet数据集,无法完全载入内存。希望借助Polars的懒加载和**流式连接(streaming join)**功能,基于另一个小数据集筛选出该大型数据集的子集进行处理,避免加载全量数据。
测试情况对比
- 本地文件场景:使用
scan_parquet或scan_pyarrow_dataset时,查询计划显示Polars会执行流式连接,谓词下推正常,仅加载符合条件的数据子集。 - S3文件场景:将文件路径改为S3地址后,Polars会先将整个数据集载入内存再执行连接,查询计划显示为
PYTHON SCAN,无法下推连接谓词。
我测试了三种实现方式:
- 扫描本地Parquet文件:符合预期,流式连接查询计划正常生成
- 扫描S3上的Parquet文件:无法实现谓词下推,触发全量数据加载
- 扫描S3上的PyArrow数据集并执行流式连接:同样无法下推连接谓词
已知限制与说明
- 当前Polars的
scan_parquet在S3上不支持谓词下推 - 测试代码仅在Polars 0.18.3及以下版本可用,高版本存在
scan_parquet读取S3的回归问题
内容的提问来源于stack exchange,提问作者bvdw
相关产品推荐
相关产品推荐

