Polars 2.0 Mengklaim 5x Lebih Cepat... Jadi Apa Saja yang Berubah?

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00Pesaing terbesar Pandas sebentar lagi akan merilis versi 2.0.
00:00:04Pembaruan Polars hampir tiba, dan perubahan terbesarnya mungkin bukan yang Anda duga.
00:00:09Secara bawaan, setiap kueri yang pernah Anda tulis beralih ke mesin yang berbeda.
00:00:14Anda tidak perlu mengubah satu baris kode pun.
00:00:15Polars juga berhenti menjamin bahwa baris data Anda dikembalikan dalam urutan semula.
00:00:19Terdengar seperti penurunan fungsi, padahal bukan; ini adalah imbalan demi memungkinkan perubahan pertama.
00:00:24Seiring Polars kian populer dengan versi 2.0, pustaka ini benar-benar menjadi saingan berat bagi Pandas.
00:00:30Mari kita lihat pembaruan terbesar sejauh ini.
00:00:37Baiklah, sejak awal, Pandas selalu menjadi pilihan utama untuk sebagian besar pekerjaan data.
00:00:43Pustaka ini sederhana, digunakan secara luas, tidak hanya bagus untuk analisis data, tetapi juga penting dalam machine learning.
00:00:49Lalu beberapa waktu lalu, Polars hadir.
00:00:51Polars selalu lebih cepat daripada Pandas.
00:00:53Kita akan membahasnya nanti.
00:00:54Kini, dengan pembaruan besar 2.0, Polars mungkin akan diadopsi secara lebih luas.
00:01:00Karena Anda sudah tahu latar belakang singkatnya, Polars sebenarnya secara diam-diam memiliki dua mesin.
00:01:05Mesin yang paling sering digunakan orang adalah mesin in-memory.
00:01:08Anda bisa membayangkannya seperti sebuah gudang.
00:01:10Mesin ini memuat seluruh himpunan data Anda ke lantai gudang, lalu menjalankan setiap langkah kueri di seluruh lantai tersebut.
00:01:17Dan proses itu sangatlah cepat.
00:01:19Selama semuanya muat di dalam RAM.
00:01:21Mesin streaming bekerja secara berbeda.
00:01:23Alih-alih satu lantai raksasa, kini kerjanya lebih mirip jalur perakitan.
00:01:27Polars memotong data menjadi bagian-bagian kecil yang disebut pengembangnya sebagai “Morsel”.
00:01:32Ukuran potongan tersebut disesuaikan agar muat di dalam cache CPU Anda.
00:01:36Kemudian potongan itu didorong melalui rencana kueri.
00:01:39Sekarang, bagian kueri yang berbeda dapat terus berjalan tanpa harus menunggu seluruh himpunan data.
00:01:43Dari situlah kecepatannya berasal.
00:01:44Dan pada akhirnya, ini juga menjadi jalan untuk bekerja dengan data yang lebih besar dari kapasitas memori Anda.
00:01:49Tetapi ada satu kendala.
00:01:50Jika Anda memiliki delapan pekerja di jalur perakitan, mereka belum tentu selesai sesuai urutan mereka mulai.
00:01:56Begitu pula dengan Polars.
00:01:58Jadi, di versi 2.0, untuk join, group by, unpivot, dokumentasinya secara harfiah menyatakan, dll.
00:02:04Tidak lagi menjamin urutan baris.
00:02:06Kecuali jika Anda memintanya secara eksplisit.
00:02:08Jika Anda suka membuat alat bantu untuk mempercepat alur kerja Anda, pastikan untuk berlangganan.
00:02:11Kami selalu merilis video baru setiap saat.
00:02:13Nah, jadi inilah bentuk nyatanya.
00:02:15Saya akan menjalankan uv pip install --pre polars.
00:02:18Dan ingat opsi --pre itu.
00:02:20Kita akan membahasnya kembali sebentar lagi.
00:02:22Oke.
00:02:22Saya memiliki LazyFrame dengan kunci 2, 1, 0.
00:02:27Saya melakukan left join ke frame lain, lalu memanggil collect.
00:02:32Dan lihat hasilnya.
00:02:34Kode yang sama persis seperti di Polars 1.
00:02:35Urutannya tidak lagi dijamin.
00:02:37Kodenya sama, hanya saja perilakunya berbeda.
00:02:39Sekarang saya menambahkan maintain_order=True pada join.
00:02:43Saya bisa mengeksekusinya lagi.
00:02:44Saya akan menjalankannya kembali di sini.
00:02:45Dan urutan aslinya telah kembali.
00:02:47Jadi, ini bukan Polars secara acak mengacak-acak data kita.
00:02:51Ini adalah cara Polars berkata, jika urutan itu penting, Anda harus memberi tahu kodenya.
00:02:54Anda benar-benar harus menyatakannya secara eksplisit.
00:02:56Dan ada detail bagus lainnya di sini.
00:02:58Jalankan fungsi explain pada suatu kueri.
00:03:01Fungsi ini tidak menyembunyikan perilaku tersebut.
00:03:03Anda hanya perlu tahu di mana harus melihatnya.
00:03:05Itulah perubahan perilaku yang besar.
00:03:06Namun versi 2.0 ini terbilang unik karena ini bukan sekadar pembaruan fitur.
00:03:10Sebenarnya ini hanyalah pembersihan kode.
00:03:12Dan ada cukup banyak hal yang dibersihkan di sini.
00:03:15Awalnya di Polars, gaya read_csv diubah menjadi scan_csv dengan fungsi collect di bawahnya.
00:03:22Fungsi profile pada LazyFrame telah dihapus.
00:03:25Fungsi melt kini berganti nama menjadi unpivot.
00:03:28Argumen join_nulls berubah menjadi nulls_equal.
00:03:30Pengubahan tipe integer secara langsung ke categorical telah dihapus.
00:03:35Anda bisa menggunakan cat2 sekarang untuk membantu mengatasi hal ini.
00:03:38Pengubahan string secara langsung ke date juga telah dihapus.
00:03:41Itu adalah konversi string ke date.
00:03:43Menjumlahkan integer signed dan unsigned 64-bit kini akan menghasilkan int128, bukan mengubahnya menjadi float yang secara diam-diam mengurangi presisi.
00:03:53Dan masih ada lebih banyak lagi yang akan datang.
00:03:55Anda bisa menggunakan concat.
00:03:57Yang sekarang menolak ukuran data yang tidak cocok alih-alih menebak maksud Anda.
00:04:02Ini sebenarnya keputusan yang cerdas dari pihak Polars.
00:04:05Setiap fitur yang dihapus akan menampilkan AttributeRemovedError.
00:04:09Pesan itu akan memberi tahu Anda penggantinya.
00:04:12Panggil melt, dan pesan error secara harfiah akan menyuruh Anda menggunakan unpivot dengan parameter index dan on.
00:04:17Semua pesan error ini pada dasarnya menjadi panduan cara menggunakannya.
00:04:20Jalankan kodenya, perbaiki masalah sesuai pesan error, dan lanjutkan kembali.
00:04:26Dan itulah alasan mengapa Polars menjadi alat andalan sehari-hari bagi banyak orang.
00:04:31Pandas sering kali membiarkan masalah terjadi saat runtime.
00:04:35Polars mencoba mendeteksi masalah lebih awal melalui semua ini.
00:04:37Anda dapat memanggil collect_schema untuk mengetahui tipe data yang salah sebelum Polars membaca satu baris pun.
00:04:44Polars benar-benar mengantisipasi apa yang akan terjadi.
00:04:47Dan pustaka ini menjadi semakin efisien.
00:04:48Lantas, di mana sebenarnya posisi Polars?
00:04:50DuckDB berfokus pada SQL.
00:04:53Polars adalah API ekspresi yang dirancang untuk Python.
00:04:56Ada juga Dask dan Spark.
00:04:58Pustaka tersebut terdistribusi.
00:04:59Sedangkan Polars berfokus pada pemrosesan dalam satu komputer.
00:05:01Pustaka open source-nya sendiri bersifat terbuka.
00:05:04Namun Polars Cloud tidak.
00:05:05Dan hal kunci itu mengubah banyak hal saat berbicara soal performa.
00:05:09Pengumuman ini menyatakan bahwa mesin streaming baru lima kali lebih cepat.
00:05:13Saya telah mencoba Polars selama bertahun-tahun, dan ya, itu lebih cepat dari Pandas, tetapi saya tidak pernah mendapatkan kecepatan fantastis hingga lima kali lipat.
00:05:21Cobalah pada beberapa himpunan data yang lebih besar.
00:05:23Anda pasti akan melihat perbedaan kecepatannya.
00:05:25Hasilnya akan bervariasi setiap eksekusi dan dataset, tetapi Anda akan merasakan perbedaannya dan melihatnya dalam waktu eksekusi.
00:05:30Dan ini mungkin perbedaan paling penting di seluruh pembaruan ini.
00:05:34Bagian yang memungkinkan mesin menulis data sementara ke disk, yaitu eksekusi out-of-core yang sesungguhnya, belum dirilis.
00:05:40Jadi, saat ini, streaming berarti data diproses secara terpotong (chunked) dan melalui pipeline.
00:05:43Ini belum berarti ukuran dataset Anda bisa secara ajaib melebihi kapasitas RAM.
00:05:46Angka 5x tersebut merupakan ekspektasi internal dari pihak Polars sendiri.
00:05:50Tidak ada tabel pengujian tolok ukur (benchmark) di dalam artikelnya.
00:05:53Dan sejujurnya, sebagian besar orang tampaknya tidak keberatan dengan hal itu.
00:05:55Banyak pengguna tampak senang dengan rilis yang berguna meskipun terkesan biasa saja.
00:05:59Tidak ada penambahan fitur raksasa secara berlebihan.
00:06:01Anda tidak perlu mempelajari hal baru dari awal.
00:06:02Pesan error tersebut, saat Anda menulis kode, akan memberi tahu Anda apa yang harus diganti.
00:06:07Hanya perbaikan perubahan mendasar, pembersihan kode, dan penggunaan versi (semver) sebagaimana mestinya.
00:06:12Namun ada dua keluhan yang terus muncul secara berulang.
00:06:14Yang pertama adalah urutan baris.
00:06:15Jika opsi maintain_order bernilai false secara bawaan, Anda bisa membuat bug yang berbahaya di dalam kode.
00:06:19Karena program tidak akan mengalami crash.
00:06:21Angka-angka Anda masih bisa tetap sepenuhnya benar.
00:06:23Hanya saja nilai tersebut terikat pada baris dalam urutan yang berbeda.
00:06:26Hal itu jauh lebih sulit disadari dibandingkan jika terjadi exception/error.
00:06:29Keluhan kedua adalah penggunaan kata “streaming” di sini.
00:06:32Orang-orang berpendapat bahwa istilah itu membingungkan untuk mesin yang belum sepenuhnya mendukung out-of-core.
00:06:38Lalu ada bug aktual pada versi Release Candidate (RC).
00:06:41Sejak versi RC dirilis, ada masalah berprioritas tinggi di mana
00:06:44fungsi group_by_dynamic menghasilkan error datetime out-of-range pada mesin streaming.
00:06:49Memanggil metode limit.
00:06:51Metode limit tidak langsung berhenti lebih awal setelah operasi join.
00:06:54Dan konversi string ke datetime bisa mengembalikan nilai null, yang dulunya langsung memunculkan error.
00:06:58Itulah mengapa saya meminta Anda untuk mengingat perintah instalasi dengan opsi --pre.
00:07:02Sebelum versi 2.0 resmi.
00:07:04Ini masih merupakan Release Candidate.
00:07:06Dan saat ini, kinerjanya memang seperti versi uji coba.
00:07:08Dan itu wajar saja.
00:07:09Bukan?
00:07:09Ini belum menjadi versi penuh.
00:07:11Satu hal lagi.
00:07:12Crate untuk Rust masih berada pada versi 0.55.
00:07:15Jadi, jika Anda menggunakan Polars dari Rust, belum ada Polars 2.0 untuk Anda saat ini.
00:07:19Namun saya mengasumsikan sebagian besar dari kita mungkin hanya akan menggunakan Python di sini.
00:07:24Sekarang, haruskah Anda memperbaruinya?
00:07:25Untuk proyek baru, ya, saya akan melakukannya.
00:07:27Benar?
00:07:27Kita sedang beradaptasi dengan teknologi dan pembaruan baru.
00:07:30Jika pipeline Anda sudah menggunakan sink_parquet atau sink_csv, Anda sebenarnya sudah
00:07:34menggunakan streaming selama ini.
00:07:36Tetapi ada beberapa kasus di mana saya sebaiknya menunggu dulu.
00:07:39Benar?
00:07:39Jika kode Anda bergantung pada urutan baris, jangan asal perbarui dan berharap semuanya lancar.
00:07:43Coba cari (grep) penggunaan group_by yang tidak diikuti oleh fungsi sort setelahnya.
00:07:47Jika Anda menggunakan group_by_dynamic, saya sarankan untuk menunggu sampai semuanya stabil.
00:07:51Maksud saya, sangat menarik untuk melihat ke mana arah perkembangan ini.
00:07:54Ini kemungkinan besar akan menjadi versi 2.0, tetapi ini belum menjadi rilis resmi.
00:07:57Anda bisa mulai membiasakan diri dengannya, tetapi ini belum sepenuhnya siap.
00:08:00Hal yang terus saya pikirkan adalah betapa tidak biasanya pembaruan ini.
00:08:03Polars 2.0 tidak menghadirkan fitur baru sama sekali.
00:08:07Namun hal itu tetap mengubah cara kerja kode yang sudah ada.
00:08:10Mesin baru ini lebih cepat di komputer saya, hanya saja tidak sampai lima kali lebih cepat.
00:08:14Jadi versi 2.0 menarik bukan karena menambahkan banyak hal baru.
00:08:18Ini menarik karena Polars menggunakan lonjakan versi utama untuk benar-benar membersihkan fondasinya
00:08:24di balik semua fungsi yang sudah kita gunakan.
00:08:26Saya Josh dari BetterStack.
00:08:28Jika Anda menyukai tips dan trik pemrograman seperti ini, pastikan untuk berlangganan.
00:08:30Sampai jumpa di video lainnya.

핵심 요약

Polars 2.0 memfokuskan pembaruan pada pembersihan kode mendasar dan penggantian mesin eksekusi bawaan ke mesin streaming yang tidak lagi menjamin urutan baris data tanpa adanya instruksi eksplisit.

하이라이트

  • Polars 2.0 secara bawaan mengubah mesin eksekusi kueri ke mesin streaming tanpa perlu mengubah baris kode.

  • Operasi join, group by, dan unpivot tidak lagi menjamin urutan baris data kecuali jika parameter maintain_order=True ditentukan secara eksplisit.

  • Polars 2.0 tidak lagi mengonversi tipe signed dan unsigned integer 64-bit menjadi float secara otomatis saat dijumlahkan, melainkan menjadi int128 untuk menjaga presisi.

  • Setiap fitur yang dihapus di Polars 2.0 akan memunculkan AttributeRemovedError yang memberikan petunjuk parameter dan fungsi pengganti.

  • Pengklaiman peningkatan kecepatan 5x lipat pada mesin streaming merupakan ekspektasi internal tanpa tabel pengujian tolok ukur resmi.

  • Dukungan eksekusi out-of-core yang menulis data sementara ke disk belum dirilis pada rilis kandidat Polars 2.0.

  • Crate Rust untuk Polars masih berada pada versi 0.55 dan belum mendapatkan pembaruan ke versi 2.0.

타임라인

Perubahan Mesin Eksekusi Bawaan dan Konsekuesi Urutan Baris

  • Polars 2.0 mengganti mesin bawaan dari in-memory menjadi mesin streaming.
  • Pemrosesan data pada mesin streaming dilakukan dalam potongan kecil berukuran cache CPU yang disebut Morsel.
  • Urutan baris data hasil operasi join, group by, dan unpivot tidak lagi dijamin secara otomatis.

Mesin in-memory memuat seluruh himpunan data ke dalam RAM, sedangkan mesin streaming membagi data menjadi potongan-potongan Morsel yang berjalan langsung melalui jalur perakitan rencana kueri. Pendekatan ini meningkatkan kecepatan dan efisiensi memori. Akibat pemrosesan paralel pada jalur perakitan tersebut, urutan keluaran data bisa berubah dari urutan aslinya. Pengembalian urutan asal memerlukan penambahan argumen maintain_order=True pada kueri.

Pembersihan Kode dan Penanganan Error yang Informatif

  • Beberapa fungsi dan konversi tipe implisit dihapus demi konsistensi dan presisi data.
  • Pesan error AttributeRemovedError memberikan instruksi langsung mengenai fungsi pengganti.
  • Fungsi collect_schema memungkinkan pemindaian tipe data sebelum data dibaca dari disk.

Polars 2.0 menghapus beberapa API lama seperti penggantian melt menjadi unpivot, pemanggilan profile pada LazyFrame, serta konversi langsung dari integer ke categorical atau string ke date. Penjumlahan integer 64-bit kini menghasilkan int128 alih-alih float untuk mencegah kehilangan presisi. Sistem error baru secara aktif memberitahukan nama fungsi pengganti dan parameter yang tepat saat kueri gagal dieksekusi.

Kinerja Mesin Streaming dan Batasan Fitur

  • Klaim kecepatan 5x lipat berpatokan pada klaim internal tanpa tolok ukur terlampir.
  • Eksekusi out-of-core penuh yang menulis data ke disk belum tersedia di Polars 2.0.
  • Penggunaan istilah streaming berpotensi menimbulkan kesalahpahaman terkait batasan RAM.

Polars memfokuskan pemrosesan data pada satu komputer berbeda dengan Dask atau Spark yang terdistribusi. Walaupun mesin streaming baru memproses data dalam bentuk pipeline dan chunked, pemrosesan ini belum mendukung penyimpanan data sementara ke disk secara penuh. Ukuran himpunan data yang diproses masih dibatasi oleh kapasitas RAM yang tersedia pada sistem.

Masalah pada Release Candidate dan Rekomendasi Migrasi

  • Opsi maintain_order=False dapat memicu bug logika tanpa menghasilkan exception/error.
  • Beberapa bug prioritas tinggi masih ditemukan pada versi Release Candidate.
  • Pembaruan proyek lama disarankan ditunda jika kode sangat bergantung pada urutan baris.

Perubahan urutan baris bawaan dapat menghasilkan angka yang benar namun terikat pada posisi baris yang salah, sehingga bug sulit terdeteksi. Versi Release Candidate saat ini masih memiliki isu pada group_by_dynamic serta konversi string ke datetime. Pengerjaan proyek baru dapat memanfaatkan Polars 2.0, namun proyek lama yang bergantung pada urutan data atau pustaka Rust disarankan menunggu rilis yang lebih stabil.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기