Polars 2.0:为什么连接不再保持行序
Polars 2.0 默认在流式引擎上运行 collect。
Polars 2.0 默认在流式引擎上运行 collect。对于 join、group_by 和 unpivot,除非您明确设置 maintain_order 或 sort,否则该版本不再保证输入行序。在我们对 Polars 2.0.0 的运行中,一个 2,000,000 行的内连接默认返回的行是乱序的,而在设置 maintain_order 后则保持了顺序。该版本还默认开启了核外溢出,并使基准测试声明为供应商自己的。
本视频涵盖的内容
- 现在,在惰性查询上调用 collect() 默认使用流式引擎,该引擎不保证 join、group_by 和 unpivot 的行序。
- 迁移指南指出,行序不再是 2.0 之前的顺序,并且不作保证;如果依赖于此,建议进行显式排序。
- 在我们的运行中,默认的内连接返回的输入顺序为 False;在连接上设置 maintain_order="left_right" 后返回 True。一台机器,一次运行,一个连接形状。
- 核外溢出默认开启:在大约 80% 的 RAM 使用量时开始溢出到磁盘,默认磁盘预算为 64 GB。核外 join 和 group_by 正在路线图上。
- collect_schema() 在读取任何数据之前捕获缺失的列,但仅在一个值上失败的类型转换只会在 collect() 时失败。
- TPC-H 和 TPC-DS 比较是供应商在衍生数据上进行的自有运行,其脚注指出结果不可与官方基准测试相比较。
翻译的文字记录
译自英文原版旁白。可用音频和字幕由 YouTube 控制。
为什么默认顺序改变了?
0:00 你认为连接会按照你写入的顺序返回行。 Polars 2.0 默认停止了这种承诺,这是有意的。 本视频内容:为什么默认值改变了? 它带来了什么好处? 以及你的哪些脚本会首先出问题? 这是 The Daily Diff,幕后揭秘。 Polars 是一个开源的 DataFrame 库: 一个你可以从 Python 调用的表引擎,
0:20 其核心是用 Rust 编写的。 它在 MIT 许可证下免费,你可以通过 pip install polars 安装它。 首先一个细节。 恢复旧顺序的开关是连接本身的参数。 我会在最后再回来讨论它。 从 2.0 版开始,collect 默认运行流式引擎。 流式处理将查询分成并行运行的块, 这些块在完成时就完成。
0:42 对于 join、group by 和 unpivot,该版本不承诺顺序。 谁会首先受到影响? 任何逐行比较输出与保存文件的人。 这个测试可能在你的笔记本电脑上通过,但在不同的机器上失败。 接下来是迁移指南。
迁移指南承诺了什么?
0:57 它说上面显示的精确行序不作保证。 因此,如果你依赖于顺序,请明确排序。 核外溢出也默认开启。 它在大约 80% 的 RAM 使用量时开始溢出到磁盘, 预算为 64 GB。 排序、窗口函数和许多表达式现在都可以溢出。 连接和分组即将推出。
基准测试公平吗?
1:17 Polars 声称在 TPC-H 和 TPC-DS 基准测试中击败了 DataFusion 和 DuckDB。这些数据来自他们自己在衍生数据上的运行, 他们的脚注指出这些结果不能与官方结果相比较。 他们自己的数据显示,在 TPC-H 上,Polars 从 16 核到 192 核,速度大约快了 3.8 倍。 他们还说,大型机器的额外线程会减慢小型查询。
我们运行时看到了什么?
1:41 我们在 Polars 2.0.0 上两次运行了相同的连接。 默认运行会打乱行。 带有标志时,输入顺序得以保留。 找到为测试提供数据的连接。 任何之后没有排序的连接都是你从未做出的行序决定。 Polars 2.0 对类型更加严格。
更严格意味着更早?
1:58 模式检查在读取任何数据之前捕获缺失的列。 它无法捕获在一个行上失败的类型转换,因为该错误等待 数据。现在我打开的循环。
如何恢复旧顺序?
2:08 开关位于连接上。 在连接上设置 maintain_order,或者在其后添加一个排序。 指南建议排序。 在我们的运行中,连接标志保留了顺序,左侧的顺序保留为 左、右。幕后判决:NEEDS REVIEW。
结论是什么?
2:22 我会在升级之前检查每个连接。 对此有什么疑问吗? 请在评论中提出。 这就是今天的差异。 我是 Axrisi 的 Niko。 负责任地合并。
来源
- Release of Polars 2.0Polars (pola.rs)
- Polars 2.0 upgrade guidePolars documentation
- Polars homepagePolars (pola.rs)
- polars-2.0-benchmark repositoryPolars on GitHub
- Release of Polars 2.0 (Hacker News discussion)Hacker News



