Polars 2.0: por que as unións xa non manteñen a orde das súas filas
Polars 2.0 executa collect nun motor de transmisión por defecto.
Polars 2.0 executa collect nun motor de transmisión por defecto. Para join, group_by e unpivot, a versión xa non garante a orde das filas de entrada a menos que establezas maintain_order ou sort explicitamente. Na nosa execución en polars 2.0.0, unha unión interna de 2.000.000 de filas devolveu as filas fóra da orde de entrada por defecto e mantivo a orde con maintain_order establecido. A versión tamén activa o vertido fóra do núcleo e fai que as reclamacións de referencia sexan propias do provedor.
Ler a edición escrita (inglés) ↗
Que abrangue este vídeo
- Chamar a collect() nunha consulta lazy agora usa o motor de transmisión por defecto, que non garante a orde das filas para join, group_by e unpivot.
- A guía de migración di que a orde xa non é a orde anterior a 2.0 e non está garantida; recomenda unha ordenación explícita se dependes dela.
- Na nosa execución, unha unión interna por defecto devolveu input order False; maintain_order="left_right" na unión devolveu True. Unha máquina, unha execución, unha forma de unión.
- O vertido fóra do núcleo está activado por defecto: comeza en aproximadamente o 80 % da RAM, cun orzamento de disco predeterminado de 64 GB. As unións e agrupacións fóra do núcleo están na folla de ruta.
- collect_schema() detecta unha columna ausente antes de que se lea calquera dato, pero unha conversión que falla nun só valor só falla en collect().
- A comparación TPC-H e TPC-DS é a propia execución do provedor sobre datos derivados, e a súa nota ao pé di que os resultados non son comparables ás referencias oficiais.
Transcrición traducida
Traducido da narración orixinal en inglés. O audio e os subtítulos dispoñibles son controlados por YouTube.
Por que cambiou a orde predeterminada?
0:00 Pensas que unha unión devolve as túas filas na orde en que as escribiches. Polars 2.0 deixou de prometer iso, por defecto, a propósito. Neste vídeo: por que cambiou o valor predeterminado? Que gañou? E cal dos teus scripts rompe primeiro? Isto é The Daily Diff, baixo o capó. Polars é unha biblioteca de DataFrame de código aberto: un motor de táboas que chamas desde Python,
0:20 co seu núcleo escrito en Rust. É gratuíto baixo a licenza MIT, e instálaso con pip install polars. Un detalle primeiro. O interruptor que devolve a antiga orde é un argumento para a propia unión. Volverei a el ao final. Desde 2.0, collect executa o motor de transmisión por defecto. A transmisión divide a consulta en anacos que se executan en paralelo, e os anacos rematan cando rematan.
0:42 Para join, group by e unpivot, a versión non promete unha orde. Quen é o primeiro en ser afectado? Quen queira que compare a saída cun ficheiro gardado, fila por fila. Esa proba pode pasar no teu portátil e fallar nunha máquina diferente. A seguir, a guía de migración.
Que promete a guía de migración?
0:57 Di que a orde exacta das filas que se mostra arriba non está garantida. Así que, se dependes da orde, ordena explicitamente. O out-of-core tamén está activado por defecto. Comeza a verter no disco en aproximadamente o oitenta por cento da RAM, cun orzamento de sesenta e catro gigabytes. Ordenar, funcións de xanela e moitas expresións poden verter agora. As unións e as agrupacións están chegando.
É o benchmark unha loita xusta?
1:17 Polars di que supera a DataFusion e DuckDB nos benchmarks TPC-H e TPC-DS. Os números proceden das súas propias execucións, sobre datos derivados, e a súa nota ao pé di que non son comparables aos resultados oficiais. Os seus propios números din que Polars acelera aproximadamente tres punto oito veces de dezaseis núcleos a cento noventa e dous, en TPC-H. Tamén din que os fíos adicionais da máquina grande retardan as consultas pequenas.
Que vemos cando o executamos?
1:41 Executamos a mesma unión dúas veces en Polars 2.0.0. A execución predeterminada mestura as filas. Coa bandeira, a orde de entrada sobrevive. Atopa as unións que alimentan unha proba. Calquera unión sen unha ordenación despois é unha decisión de orde de fila que nunca tomaches. Polars 2.0 é máis estrito cos tipos.
Máis estrito significa máis cedo?
1:58 A verificación do esquema detecta unha columna ausente antes de que se lea calquera dato. Non pode detectar unha conversión que falla nunha fila, porque ese erro agarda os datos. Agora o bucle que abrín.
Como recupero a antiga orde?
2:08 O interruptor reside na unión. Define maintain order na unión, ou engade unha ordenación despois dela. A guía suxire a ordenación. A bandeira de unión mantivo a orde na nosa execución, coa orde do lado esquerdo mantida como esquerda, dereita. Veredicto, baixo o capó: NEEDS REVIEW.
Cal é o veredicto?
2:22 Revisaría cada unión antes de actualizar. Tes algunha pregunta sobre isto? Póa nos comentarios. E esa é a diferenza por hoxe. Son Niko de Axrisi. Fusiona con responsabilidade.
Fontes
- 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



