Polars 2.0发布首个候选版本,主要变化是将流式引擎设为默认,大幅提升内存和性能,预计速度提升5倍。同时发布了迁移指南帮助用户过渡。
正文
Polars 2.0 首个候选版本今日发布,正式版将在数周内推出。本次大版本升级并非为了增加新功能,而是为了移除历史设计限制并优化默认设置,使更多用户受益。最核心的变化是:所有 LazyFrame 查询将默认使用流式引擎,普通用户可显著降低内存占用并提升性能,预计整体速度提升可达5倍以上。
为帮助用户过渡,官方已发布完整迁移指南。以下是主要变更亮点:
流式引擎成为默认
调用 LazyFrame.collect() 将默认启用流式引擎,大幅优化内存与性能。但需注意,流式引擎不保证某些操作(如 join、group_by、unpivot)的行顺序。若需保留顺序,可设置 maintain_order=True。用户也可通过 pl.Config.set_engine_affinity("in-memory") 全局恢复旧版内存引擎,或单次查询指定 engine="in-memory"。
更严格的类型检查
Polars 2.0 强化了数据一致性校验,避免静默错误:
- is_in 操作不再允许有损类型转换(如 Float64 与 Int64 混用会直接报错)
- 横向拼接 concat 会严格检查行数,不再自动填充 null 值
- 移除模糊的类型转换方法,强制使用专用解析函数(如 str.to_date() 替代 cast(pl.Date))
更清晰的错误提示
新增 AttributeRemovedError 和 ArgumentRemovedError 异常类型,当使用已移除的 API 时,错误信息会直接指向替代方案。例如 melt 方法已更名为 unpivot,join_nulls 参数已重命名为 nulls_equal。
未来规划
Polars 2.x 将持续优化:流式引擎的完整外核支持、新型 IO 插件架构、高速 S3 读取器、SQL 功能增强、基于成本的查询规划器、连接重排序,以及移除 mmap 实现全异步管道。
用户可通过 pip install polars==2.0rc1 安装候选版本体验,反馈请提交至 GitHub Issues 或 Discord 社区。
评论
根据评论内容,总结如下:
主要观点一:对版本升级的积极评价(认可度较高)
- 评论1(benrutter)高度认可Polars 2.0的版本升级理念,认为其遵循语义化版本规范,专注于移除旧设计缺陷和调整默认设置,而非堆砌新功能。这种稳定性导向的做法赢得了用户信任。
- 关键引用:
"I love seeing projects take semver seriously like this! Version bumps should really be about removing deprecated cruft rather than shiny new features."
"Their focus on stability was a big part if convincing me to make the jump initially!"
主要观点二:对发布时间的负面反馈(认可度中等)
- 评论2(rfgplk)对“未来几周内发布”的表述表示不满,认为这种模糊时间线会降低期待。
- 关键引用:
"Seeing 'release will land in the following weeks' kind of immediately turns me off."
主要观点三:对Polars的推广热情(认可度较高)
- 评论3(bobson_dugnutt5)表达了对Polars的喜爱,并积极在团队中推广,鼓励放弃pandas转向Polars。
- 关键引用:
"I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it."
平衡性总结:
评论整体对Polars 2.0的版本策略持正面态度,尤其赞赏其稳定性优先的升级方式;但对发布时间的模糊表述存在负面反馈。同时,用户对Polars的推广热情反映了其社区认可度。