Polars 2.0预发布版带来5倍速度提升——但可能改变行顺序

Polars 2.0预发布版带来5倍速度提升——但可能改变行顺序

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

Polars 2.0发布候选版,默认将LazyFrame查询改为流式引擎,以提升内存和性能,但可能改变行顺序,影响依赖顺序的代码。用户需显式排序或设置maintain_order=True,或保留内存引擎。2.0还移除模糊类型转换,未来将改进IO插件、S3读取器等。

🔎

延伸解读

流式引擎的取舍

Polars 2.0将流式引擎设为默认,以批量方式处理查询,从而降低内存占用并提升性能,但代价是某些操作(如join、group_by、unpivot)不再保证行顺序。这意味着依赖行顺序的代码可能被“静默影响”,需要开发者主动检查并调整。

迁移风险与应对

对于依赖行顺序的代码,Polars提供了两种缓解方案:显式排序或在相关操作中设置maintain_order=True。此外,用户仍可通过设置引擎亲和性保留内存引擎作为默认。这些措施有助于在享受性能提升的同时,避免因行顺序变化导致的潜在错误。

API严格化趋势

Polars 2.0移除了许多模糊的类型转换,例如要求使用.str.to_date()或.str.to_datetime()来解析字符串为时间类型。这一变化旨在提供“一种明显的方式”进行数据解析,减少歧义,但可能要求用户更新现有代码以适应更严格的API。

Q&A

Polars 2.0 预发布版的主要性能提升是什么?

Polars 2.0 预发布版默认将 LazyFrame 查询改为流式引擎,从而带来巨大的内存和性能改进,聚合查询预计可提升 5 倍以上。

Polars 2.0 中流式引擎默认会改变行顺序吗?

是的,流式引擎默认不保证某些操作(如 join、group_by、unpivot)的行顺序,这可能导致返回的行顺序发生变化。

如果我的代码依赖行顺序,如何避免 Polars 2.0 升级带来的问题?

有两种主要方法:显式排序或设置 maintain_order=True(如果适用)。另外,也可以将引擎亲和性设置为内存引擎,以保持默认行为。

Polars 2.0 移除了哪些模糊类型转换?

Polars 2.0 移除了许多模糊的类型转换,例如将字符串解析为时间类型时,现在必须使用 .str.to_date() 或 .str.to_datetime() 等方法,以提供明确的解析方式。

Polars 2.0 未来计划有哪些改进?

Polars 2.x 未来计划包括新的 IO 插件设计、更快的 S3 读取器、基于成本的规划器、连接重排序以及 SQL 覆盖范围的重大改进。

为什么 Polars 选择发布预发布版而不是等待正式版?

Polars 团队表示他们不限制新功能,而是倾向于在功能准备好后尽快发布,因此推出了预发布版。

🏷️

标签

➡️

继续阅读