+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: Mengapa Gabungan Tidak Lagi Mempertahankan Urutan Barisnya

Polars 2.0 menjalankan pengumpulan pada mesin streaming secara default.

Polars 2.0 menjalankan pengumpulan pada mesin streaming secara default. Untuk operasi gabung (join), group_by, dan unpivot, rilis ini tidak lagi menjamin urutan baris masukan kecuali Anda secara eksplisit mengatur maintain_order atau sort. Dalam pengujian kami pada polars 2.0.0, sebuah gabungan inner join 2.000.000 baris mengembalikan baris di luar urutan masukan secara default dan mempertahankan urutan dengan maintain_order diatur. Rilis ini juga mengaktifkan out-of-core spilling dan menjadikan klaim benchmark sebagai klaim vendor sendiri.

Baca edisi tertulis (Inggris) ↗

Isi video ini

  • Memanggil collect() pada kueri lazy sekarang menggunakan mesin streaming secara default, yang tidak menjamin urutan baris untuk join, group_by, dan unpivot.
  • Panduan migrasi menyatakan bahwa urutan tidak lagi sama dengan urutan pra-2.0 dan tidak dijamin; ia merekomendasikan pengurutan eksplisit jika Anda bergantung padanya.
  • Dalam pengujian kami, gabungan inner join default mengembalikan urutan masukan False; maintain_order="left_right" pada gabungan mengembalikan True. Satu mesin, satu pengujian, satu bentuk gabungan.
  • Out-of-core spilling diaktifkan secara default: ia mulai "meluber" ke disk sekitar 80% RAM, dengan anggaran disk default 64 GB. Join dan group_by out-of-core sedang dalam peta jalan.
  • collect_schema() menangkap kolom yang hilang sebelum data apa pun dibaca, tetapi cast yang gagal pada satu nilai hanya gagal pada collect().
  • Perbandingan TPC-H dan TPC-DS adalah pengujian vendor sendiri pada data turunan, dan catatan kakinya mengatakan hasilnya tidak sebanding dengan benchmark resmi.

Transkrip terjemahan

Diterjemahkan dari narasi asli bahasa Inggris. Audio dan teks tersedia yang dikontrol oleh YouTube.

Mengapa urutan default berubah?

0:00 Anda berpikir gabungan mengembalikan baris Anda dalam urutan Anda menuliskannya. Polars 2.0 berhenti menjanjikan hal itu, secara default, dengan sengaja. Dalam video ini: mengapa default berubah? Apa keuntungannya? Dan skrip Anda yang mana yang rusak duluan? Ini The Daily Diff, di balik layar. Polars adalah pustaka DataFrame sumber terbuka: mesin tabel yang Anda panggil dari Python,

0:20 dengan intinya ditulis dalam Rust. Ini gratis di bawah lisensi MIT, dan Anda menginstalnya dengan pip install polars. Satu detail dulu. Sakelar yang mengembalikan urutan lama adalah argumen untuk gabungan itu sendiri. Saya akan kembali lagi nanti. Sejak 2.0, collect menjalankan mesin streaming secara default. Streaming membagi kueri menjadi potongan-potongan yang berjalan secara paralel, dan potongan-potongan itu selesai ketika mereka selesai.

0:42 Untuk join, group by dan unpivot, rilis tidak menjanjikan urutan. Siapa yang terkena dampak pertama? Siapa pun yang membandingkan keluaran dengan file yang disimpan, baris demi baris. Tes itu bisa lolos di laptop Anda dan gagal di mesin yang berbeda. Selanjutnya, panduan migrasi.

Apa yang dijanjikan panduan migrasi?

0:57 Dikatakan urutan baris persis seperti yang ditunjukkan di atas tidak dijamin. Jadi jika Anda bergantung pada urutan, urutkan secara eksplisit. Out-of-core juga aktif secara default. Ini mulai meluber ke disk sekitar delapan puluh persen RAM, dengan anggaran enam puluh empat gigabyte. Sortir, fungsi jendela, dan banyak ekspresi sekarang dapat meluber. Gabungan dan group-by akan datang.

Apakah benchmark ini pertarungan yang adil?

1:17 Polars mengatakan mengalahkan DataFusion dan DuckDB pada TPC-H dan TPC-DS benchmark. Angka-angka berasal dari pengujian mereka sendiri, pada data turunan, dan catatan kaki mereka mengatakan itu tidak sebanding dengan hasil resmi. Angka mereka sendiri mengatakan Polars menjadi sekitar tiga koma delapan kali lebih cepat dari enam belas inti menjadi seratus sembilan puluh dua, pada TPC-H. Mereka juga mengatakan utas ekstra mesin besar memperlambat kueri kecil.

Apa yang kita lihat saat menjalankannya?

1:41 Kami menjalankan gabungan yang sama dua kali pada Polars 2.0.0. Pengujian default mengacak baris. Dengan flag, urutan masukan tetap utuh. Temukan gabungan yang menjadi input sebuah pengujian. Setiap gabungan tanpa pengurutan setelahnya adalah keputusan urutan baris yang tidak pernah Anda buat. Polars 2.0 lebih ketat tentang tipe.

Apakah lebih ketat berarti lebih awal?

1:58 Pemeriksaan skema menangkap kolom yang hilang sebelum data apa pun dibaca. Itu tidak dapat menangkap cast yang gagal pada satu baris, karena kesalahan itu menunggu data. Sekarang loop yang saya buka.

Bagaimana cara mengembalikan urutan lama?

2:08 Sakelar ada pada gabungan. Atur maintain order pada gabungan, atau tambahkan pengurutan setelahnya. Panduan menyarankan pengurutan. Flag gabungan mempertahankan urutan dalam pengujian kami, dengan urutan sisi kiri dipertahankan sebagai kiri, kanan. Putusan, di balik layar: NEEDS REVIEW.

Apa putusannya?

2:22 Saya akan meninjau setiap gabungan sebelum melakukan peningkatan. Ada pertanyaan tentang ini? Cantumkan di komentar. Dan itulah perbedaannya untuk hari ini. Saya Niko dari Axrisi. Gabungkan dengan bertanggung jawab.

Sumber

  1. Release of Polars 2.0Polars (pola.rs)
  2. Polars 2.0 upgrade guidePolars documentation
  3. Polars homepagePolars (pola.rs)
  4. polars-2.0-benchmark repositoryPolars on GitHub
  5. Release of Polars 2.0 (Hacker News discussion)Hacker News

Video terkait