内容提要
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 团队表示他们不限制新功能,而是倾向于在功能准备好后尽快发布,因此推出了预发布版。