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% 的記憶體使用量時開始,預設磁碟預算為 64 GB。外核聯結和 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% 的記憶體使用量時開始溢寫到磁碟, 預算為 64 GB。 排序、窗口函數和許多表達式現在都可以溢寫。 聯結和 group-by 即將推出。
基準測試公平嗎?
1:17 Polars 表示它在 TPC-H 和 TPC-DS 基準測試中擊敗了 DataFusion 和 DuckDB。 這些數字來自他們自己在衍生數據上執行的結果, 他們的註腳表示它們與官方結果不可比較。 他們自己的數字顯示,Polars 在 TPC-H 上從十六核到一百九十二核速度提升了約 3.8 倍。 Polars 在 TPC-H 上從十六核到一百九十二核速度提升了約 3.8 倍。 他們還表示,大型機器的額外執行緒會降低小型查詢的速度。
我們執行時看到了什麼?
1:41 我們在 Polars 2.0.0 上將相同的聯結執行了兩次。 預設執行會打亂行。 使用該標誌,輸入順序得以保留。 找到用於測試的聯結。 任何後面沒有排序的聯結都是您從未做過的行序決定。 Polars 2.0 對類型更嚴格。
更嚴格是否意味著更早?
1:58 模式檢查在讀取任何數據之前捕獲遺失的列。 它無法捕獲在單行上失敗的類型轉換,因為該錯誤會等待數據。 現在回到我開啟的循環。
我如何恢復舊的順序?
2:08 開關位於聯結上。 在聯結上設定 maintain order,或者在其後添加一個排序。 指南建議排序。 在我們的執行中,聯結標誌保留了順序,左側的順序保留為左、右。 幕後判決:NEEDS REVIEW。
結論是什麼?
2:22 我會在升級前審查每個聯結。 對此有疑問嗎? 請在評論中提出。 這就是今天的 The Daily Diff。 我是 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



