| 失效链接处理 |
|
Polars 2来了,能够处理千万级以上数据,速度是pandas的5-10倍
相关截图:
![]() 主要内容:
先认识一下 Polars
Polars 是一个用 Rust 写的 DataFrame 库,Python / Rust / Node.js 都能用。它和 pandas 干的是同一类活:读表、筛选、分组、关联、写出结果。差别在于底层。
pandas 主要在 Python 里一块一块处理,单核吃得比较多。Polars 从一开始就按列式存储来设计,计算走 SIMD 向量化,查询还能多核并行。写法上它更像 SQL:你先把整条查询描述清楚,真正执行时再一起优化,而不是每写一行就立刻算一行。
日常开发里,你会经常碰到这两种对象:
DataFrame:数据已经在内存里,立刻能看、能改,适合小表和探索。
LazyFrame:只记录查询计划,不立刻算。等你调用 collect() 或 sink_parquet() 时,引擎才会真正跑。
Polars 1.x 里,collect() 默认走内存引擎,数据得一次性装进 RAM。2.0 把这件事改了,这也是这次版本号直接跳大的原因。
Polars 2 到底改了什么
官方作者 Ritchie Vink 自己说,希望这次升级对用户是「boring」的——别指望一堆花哨 API,重点是默认值更合理、API 更干净。真正有体感的变化,大概就这几条。
1. LazyFrame 默认走流式引擎
这是 2.0 影响最大的一处。以前要自己写 collect(engine="streaming"),现在 engine="auto" 会落到流式引擎上。数据按批次往下推,而不是整张表一口吞掉。官方给出的预期是:大多数查询内存更省,整体大约快 5 倍。
副作用也要心里有数:join、group_by、unpivot 这类操作,默认不再保证行顺序。需要稳定顺序时,显式写 maintain_order,或者给结果加一次 sort()。
2. 更严格,错误更早暴露
以前一些「好心」的隐式转换,现在会直接报错。比如 is_in 遇到不能无损对齐的类型,不再偷偷把整型压成浮点;横向 concat 行数对不上,也不再默默补 null。字符串转日期,不能再 cast(pl.Date),得用 .str.to_date()。
听起来更麻烦,实际是好事。数据对不上时,与其跑了 20 分钟给你一份看起来还行的结果,不如一开始就把问题甩出来。
3. 旧 API 删干净了,报错会告诉你该换什么
melt 换成 unpivot,with_row_count 换成 with_row_index。你如果还写旧方法,会收到专门的 AttributeRemovedError / ArgumentRemovedError,错误信息里直接写了替代写法。
2.x 后面还会陆续补上更完整的磁盘外计算、新的 IO 插件、更快的 S3 读取、代价模型优化器和 join 重排。2.0 本身更像一次「把地基打正」的版本。
|


苏公网安备 32061202001004号
