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

为何polars.scan_csv的速度甚至超过磁盘读取速度?

为什么Polars过滤CSV的速度看起来比磁盘读取还快?

你的测试结果是Polars多个核心优化特性共同作用的产物,具体原因拆解如下:

  • 谓词下推(Predicate Pushdown):scan_csv属于懒执行API,Polars不会预先加载整个1.51GB的CSV文件到内存,而是在文件读取阶段就直接应用filter条件。它只会解析并读取ts列的数据,且只保留符合ts == '2015-01-01'的行对应的内容,实际磁盘IO量远小于文件总大小。

  • 列导向读取:CSV是行存储格式,但Polars扫描时会按列解析处理。你的需求仅涉及ts列,因此其他列完全不会被读取和解析,直接砍掉了大部分不必要的IO与计算开销。

  • 操作系统磁盘缓存:如果该CSV文件此前被读取过,操作系统会将常用的文件块缓存到内存中。即使是HDD,读取缓存内的数据速度也接近内存读写速度(远高于HDD原生100-200MB/s的顺序读取速度)。若你的测试是在文件已被缓存的情况下运行,会直接拉高整体操作速度。

  • 矢量化字符串处理:Polars对字符串类型做了深度优化,比较ts列与目标字符串时采用矢量化批量操作,完全规避Python层面的循环开销,过滤计算的效率极高,不会成为流程瓶颈。

  • 查询优化器自动重写:Polars的查询优化器会自动调整执行逻辑,将过滤操作尽可能前置到读取阶段,避免冗余的数据加载与转换步骤。整个流程先解析ts列、过滤符合条件的行,再将结果转换为Pandas DataFrame,没有多余环节。

本质上你看到的“750MB/s”并非读取整个文件的速度,而是Polars在仅读取必要数据、利用缓存和高效计算的前提下,完成查询的等效速度。实际磁盘IO量远小于1.51GB,再加上缓存与矢量化计算的加持,才会出现这种看似“超越磁盘速度”的结果。

内容的提问来源于stack exchange,提问作者lauhoman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:54:10