π Polars 2.0 Π²ΡΡΠ΅Π»: ΡΡΡΠΈΠΌΠΈΠ½Π³ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, spill Π½Π° Π΄ΠΈΡΠΊ ΠΈ ΠΎΠ±Π³ΠΎΠ½ DuckDB Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
6 ΠΎΠΊΡΡΠ±ΡΡ Π ΠΈΡΡΠΈ ΠΠΈΠ½ΠΊ Π²ΡΠΏΡΡΡΠΈΠ» Polars 2.0. ΠΠ»Π°Π²Π½ΠΎΠ΅: collect Π½Π° LazyFrame ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ streaming-Π΄Π²ΠΈΠΆΠΎΠΊ, ΡΡΠΎ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π·Π°ΠΏΡΠΎΡΠΎΠ².Β
ΠΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ Π²ΠΊΠ»ΡΡΡΠ½ out-of-core: ΡΠΏΠΈΠ» Π½Π° Π΄ΠΈΡΠΊ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΠΈ 80% ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π±ΡΠ΄ΠΆΠ΅Ρ Π΄ΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 64 ΠΠ. Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΎΠΊΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠΎ ΡΠΆΠ΅ ΡΠΌΠ΅ΡΡ, Π²Π½Π΅ΡΠ½ΠΈΠ΅ join ΠΈ group by Π² ΠΏΠ»Π°Π½Π°Ρ .
SQL ΡΡΠ°Π» ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ join, Π»ΡΡΡΠ΅Π΅ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠΈΡ ΠΏΠΎΠ΄ΠΏΠ»Π°Π½ΠΎΠ² ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ ΠΠ»ΡΠΌΠ°. ΠΠΎΡΠ²ΠΈΠ»ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ dtype Map Π²ΠΌΠ΅ΡΡΠΎ List(Struct(key, value)) Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ map.get, map.contains_key, map.keys ΠΈ map.values.
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ TPC-H ΠΈ TPC-DS (Π½Π΅ ΡΡΠ°Π²Π½ΠΈΠΌΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ Π½Π° SF100 ΠΏΡΠΈ ΡΠΎΡΡΠ΅ Ρ 16 Π΄ΠΎ 192 vCPU Polars ΡΡΠΊΠΎΡΡΠ΅ΡΡΡ Π² 3,8 ΡΠ°Π·Π° Π½Π° TPC-H ΠΈ Π² 2,2 ΡΠ°Π·Π° Π½Π° TPC-DS, DuckDB 1.5.6 Π² 3,2 ΠΈ 1,9 ΡΠ°Π·Π°, DataFusion Π² 1,7 ΠΈ 1,0. ΠΠΎ Π½Π° SF10 ΠΊΠ°ΡΡΠΈΠ½Π° ΡΠ΅ΡΡΠ½Π΅Π΅: Π½Π° TPC-H Polars Π½Π° ΡΡΠΎΠ²Π½Π΅, Π° Π½Π° TPC-DS ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π² 1,8 ΡΠ°Π·Π°. ΠΠΈΠ½ΠΎΠΉ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΠΎΠ²Π΅ΡΡ Π΅Π΄ Π½Π° 192 ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΠΏΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ 32 ΡΠ΄ΡΠ°ΠΌΠΈ Polars ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ΅Π½ Π²Π΅Π·Π΄Π΅, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠ°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ΅Π»ΠΈΠ·Π΅.
Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ: streaming-Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΡΠΎΠΊ Π² join, group_by ΠΈ unpivot, Π½ΡΠΆΠ΅Π½ maintain_order=True. ΠΡΠΈΠ±ΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ ΡΠ°Π½ΡΡΠ΅, Π° Π½Π΅ΡΠ²Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π»Π° ΠΎΠΏΡΠΈΠ΅ΠΉ. ΠΠ°ΠΉΠ΄ ΠΏΠΎ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄Ρ Π΅ΡΡΡ Π½Π° docs.pola.rs.
https://pola.rs/posts/release-polars-2/
6 ΠΎΠΊΡΡΠ±ΡΡ Π ΠΈΡΡΠΈ ΠΠΈΠ½ΠΊ Π²ΡΠΏΡΡΡΠΈΠ» Polars 2.0. ΠΠ»Π°Π²Π½ΠΎΠ΅: collect Π½Π° LazyFrame ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ streaming-Π΄Π²ΠΈΠΆΠΎΠΊ, ΡΡΠΎ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π·Π°ΠΏΡΠΎΡΠΎΠ².Β
ΠΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ Π²ΠΊΠ»ΡΡΡΠ½ out-of-core: ΡΠΏΠΈΠ» Π½Π° Π΄ΠΈΡΠΊ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΠΈ 80% ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π±ΡΠ΄ΠΆΠ΅Ρ Π΄ΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 64 ΠΠ. Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΎΠΊΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠΎ ΡΠΆΠ΅ ΡΠΌΠ΅ΡΡ, Π²Π½Π΅ΡΠ½ΠΈΠ΅ join ΠΈ group by Π² ΠΏΠ»Π°Π½Π°Ρ .
SQL ΡΡΠ°Π» ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ join, Π»ΡΡΡΠ΅Π΅ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠΈΡ ΠΏΠΎΠ΄ΠΏΠ»Π°Π½ΠΎΠ² ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ ΠΠ»ΡΠΌΠ°. ΠΠΎΡΠ²ΠΈΠ»ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ dtype Map Π²ΠΌΠ΅ΡΡΠΎ List(Struct(key, value)) Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ map.get, map.contains_key, map.keys ΠΈ map.values.
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ TPC-H ΠΈ TPC-DS (Π½Π΅ ΡΡΠ°Π²Π½ΠΈΠΌΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ Π½Π° SF100 ΠΏΡΠΈ ΡΠΎΡΡΠ΅ Ρ 16 Π΄ΠΎ 192 vCPU Polars ΡΡΠΊΠΎΡΡΠ΅ΡΡΡ Π² 3,8 ΡΠ°Π·Π° Π½Π° TPC-H ΠΈ Π² 2,2 ΡΠ°Π·Π° Π½Π° TPC-DS, DuckDB 1.5.6 Π² 3,2 ΠΈ 1,9 ΡΠ°Π·Π°, DataFusion Π² 1,7 ΠΈ 1,0. ΠΠΎ Π½Π° SF10 ΠΊΠ°ΡΡΠΈΠ½Π° ΡΠ΅ΡΡΠ½Π΅Π΅: Π½Π° TPC-H Polars Π½Π° ΡΡΠΎΠ²Π½Π΅, Π° Π½Π° TPC-DS ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π² 1,8 ΡΠ°Π·Π°. ΠΠΈΠ½ΠΎΠΉ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΠΎΠ²Π΅ΡΡ Π΅Π΄ Π½Π° 192 ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΠΏΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ 32 ΡΠ΄ΡΠ°ΠΌΠΈ Polars ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ΅Π½ Π²Π΅Π·Π΄Π΅, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠ°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ΅Π»ΠΈΠ·Π΅.
Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ: streaming-Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΡΠΎΠΊ Π² join, group_by ΠΈ unpivot, Π½ΡΠΆΠ΅Π½ maintain_order=True. ΠΡΠΈΠ±ΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ ΡΠ°Π½ΡΡΠ΅, Π° Π½Π΅ΡΠ²Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π»Π° ΠΎΠΏΡΠΈΠ΅ΠΉ. ΠΠ°ΠΉΠ΄ ΠΏΠΎ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄Ρ Π΅ΡΡΡ Π½Π° docs.pola.rs.
https://pola.rs/posts/release-polars-2/