Polars read_csv_batched在GCS环境下无法使用的问题求助
从GCS加载大CSV到Polars时的内存与read_csv_batched兼容问题
核心问题
- 加载GCS上1GB以上的CSV文件时遭遇内存瓶颈,尝试用
read_csv_batched方法优化,但该方法无法兼容GCS的多种读取方式:- 原生GCS blob字节、
blob.open()、fsspec/gcsfs这些在read_csv中正常工作的方式,在read_csv_batched里全部失败,报错信息固定为:error: expected str, bytes or os.PathLike object, not TextIOWrapper
- 原生GCS blob字节、
本地测试情况(UPDATE1)
- 在8GB内存的本地环境,先下载目标季度文件后运行以下代码:
df = pl.scan_csv(filename).collect(engine='streaming')
- 冷启动(重启后无其他程序)首次运行耗时约48秒
- 二次运行耗时约2秒
- 但内存紧张场景下(比如开发环境满负载),会直接导致会话崩溃、Ubuntu强制登出,因此转向
read_csv_batched但在GCP环境无法正常使用 - 需求:需要在内存受限环境(最终部署至GCP Cloud Run)中稳定加载大文件,可接受较慢的处理速度
Cloud Run测试情况(UPDATE2)
- 在配置2vCPU、8GB内存的GCP Cloud Run服务中,运行以下代码仍因内存不足崩溃:
fs = gcsfs.GCSFileSystem(project='projectname', token='cloud') file = fs.open(full_filename, 'rb') source_data=pl.scan_csv(source=file , schema=source_schema , truncate_ragged_lines=True ,low_memory=True).collect(engine='streaming')
内容的提问来源于stack exchange,提问作者sicsmpr
相关产品推荐
相关产品推荐

