Polars
(pola.rs)- Library DataFrame open-source yang ditujukan untuk lingkungan yang membutuhkan pemrosesan data cepat pada satu mesin, dengan catatan 575 juta+ unduhan dan 38 ribu+ bintang GitHub
- Inti performanya terletak pada mesin kueri multithread berbasis Rust serta pemrosesan berorientasi kolom, vektorisasi, SIMD, dan eksekusi paralel
- Tetap tersedia sebagai library open-source berlisensi MIT, dan juga menyediakan Polars Cloud untuk memperluas workload produksi dengan API yang sama
- Mengklaim peningkatan performa lebih dari 30x dibandingkan pandas, dengan benchmark turunan TPC-H dijalankan pada c3-highmem-22 dengan scale factor 10 dan kondisi termasuk I/O
- Mendukung CSV, JSON, Parquet, Delta Lake, AVRO, Excel, Arrow, database utama, serta storage S3 dan Azure sehingga mudah diintegrasikan ke data stack yang sudah ada
Cara Polars disediakan
- Polars adalah library open-source untuk manipulasi data, dan telah memposisikan diri sebagai salah satu solusi pemrosesan data tercepat pada satu mesin
- Menyediakan API yang terstruktur dan bertipe, dengan tujuan menggabungkan daya ekspresi dan kemudahan penggunaan
- Metrik publik saat ini adalah sebagai berikut
- 575M+ unduhan
- 38k+ bintang GitHub
- Dokumen untuk memulai dapat dilihat di Get started
-
Polars open-source
- Polars adalah library open-source yang dapat digunakan secara gratis di bawah lisensi MIT
- Disediakan sebagai library DataFrame berperforma tinggi, dengan cara instalasi yang sederhana
- Contoh instalasi adalah sebagai berikut
- Python:
pip install polars - Rust:
polars = { version = "x", features = ["lazy", ...]} - Node.js:
const pl = require('nodejs-polars');
- Python:
-
Polars Cloud
- Polars Cloud adalah solusi terkelola untuk memperluas kueri Polars dari lingkungan notebook ke workload produksi di cloud atau on-premises
- Dapat diskalakan dengan API yang sama tanpa perubahan kode
- Mendukung metode deployment Cloud atau On-Prem
- Penagihan dilakukan hanya untuk eksekusi kueri
- Bisa dicoba di Polars Cloud
Model performa dan integrasi data
- Dasar performa Polars adalah mesin kueri multithread berbasis Rust dan desain pemrosesan paralel
- Vektorisasi dan pemrosesan berorientasi kolom memungkinkan algoritme yang cache-coherent dan performa tinggi pada prosesor modern
- Dibandingkan dengan berbagai solusi dalam benchmark TPC-H independen yang diturunkan, dengan tujuan mereproduksi pekerjaan pembersihan data yang umum di dunia nyata
- Dibandingkan pandas, peningkatan performa lebih dari 30x dimungkinkan
- Benchmark dijalankan di c3-highmem-22 dengan scale factor 10 dan kondisi termasuk I/O
- Kuerinya tersedia sebagai open source
- Rincian lebih lanjut dapat dilihat di Learn more
-
Kemudahan penggunaan dan optimasi eksekusi
- Pengguna menulis kueri sesuai intent yang diinginkan, lalu pengoptimal kueri Polars menentukan cara eksekusi yang efisien
- Membagi pekerjaan ke CPU core yang tersedia dan mengeksekusinya secara paralel tanpa pengaturan tambahan atau overhead serialisasi
- Menggunakan model memori Apache Arrow untuk integrasi dengan tool data yang sudah ada
- Berbagi data zero-copy dapat mengurangi biaya kolaborasi antar-tool
- Dirancang dekat dengan mesin tanpa dependensi eksternal, sehingga dapat mengontrol API, memori, dan eksekusi
- Dataset yang lebih besar daripada memori dapat diproses dengan streaming API sehingga seluruh data tidak perlu dimuat ke memori
-
Format data yang didukung
- Polars mendukung baca dan tulis format data umum sehingga dapat diintegrasikan dengan data stack yang sudah ada
- Cakupan dukungannya adalah sebagai berikut
- Text: CSV, JSON
- Binary: Parquet, Delta Lake, AVRO, Excel
- IPC: Feather, Arrow
- Databases: MySQL, Postgres, SQL Server, Sqlite, Redshift, Oracle
- Cloud storage: S3, Azure Blob, Azure File
1 komentar
Komentar Hacker News
Halaman ini terasa sangat jelas ditulis untuk orang yang sudah tahu apa yang mereka lihat. Sejak kalimat pertama, alih-alih menjelaskan alatnya, langsung mulai dari pembahasan kualitas seperti “Polars is written from the ground up with performance in mind”, dan sisanya juga mengikuti alur yang sama
Adakah yang bisa menjelaskan seperti kepada anak 5 tahun tentang apa ini dan kebutuhan seperti apa yang cocok diselesaikan olehnya?
Suntingan: akhirnya saya memahaminya sebagai implementasi alternatif untuk Pandas DataFrame. Menurut penjelasan yang saya temukan di Google https://realpython.com/pandas-dataframe/, DataFrame adalah struktur yang menyimpan data 2 dimensi dan label, banyak dipakai di bidang yang padat data seperti data science, machine learning, dan komputasi ilmiah, serta mirip tabel SQL atau spreadsheet Excel/Calc
Saya adalah target pembaca Polars, dan sudah berbulan-bulan ingin mencobanya tetapi terus menunda. Saya masih punya loyalitas terhadap Pandas karena Wes McKinney, pencipta Pandas, menulis buku yang berguna untuk menjelaskan alat-alat analisis umum https://wesmckinney.com/book/
Lalu muncul grafik yang membandingkannya dengan pandas, modin, vaex, tetapi saya sama sekali tidak tahu apa itu semua, jadi akhirnya saya merasa ini memang bukan untuk saya. Saya suka membaca dan belajar tentang teknologi atau proyek baru, tetapi di sini tidak ada pegangan yang bisa saya tangkap
Mungkin beginilah rasanya bagi orang awam saat saya mulai bicara tentang hal-hal remeh di web development
Hal menarik dari Polars adalah, ia mirip Pandas tetapi menggunakan Arrow, backend Rust yang lebih efisien, dan memiliki sesuatu seperti query planner yang membuat kombinasi operasi menjadi lebih efisien. Biasanya Polars jauh lebih efisien daripada Pandas, sehingga pekerjaan yang dulu membutuhkan infrastruktur rumit sering kali bisa dijalankan di satu mesin saja
Ini adalah persaingan yang sangat bersahabat dengan proyek yang dibuat oleh pengembang inti Pandas, dan tampaknya semua orang menyukainya; seiring waktu, kemungkinan besar ia bisa menggantikan Pandas
Tulisan terkait:
Detailed Comparison Between Polars, DuckDB, Pandas, Modin, Ponder, Fugue, Daft - https://news.ycombinator.com/item?id=37087279 - Agustus 2023
Polars: Company Formation Announcement - https://news.ycombinator.com/item?id=36984611 - Agustus 2023
Replacing Pandas with Polars - https://news.ycombinator.com/item?id=34452526 - Januari 2023
Fast DataFrames for Ruby - https://news.ycombinator.com/item?id=34423221 - Januari 2023
Modern Polars: A comparison of the Polars and Pandas dataframe libraries - https://news.ycombinator.com/item?id=34275818 - Januari 2023
Rust polars 0.26 is released - https://news.ycombinator.com/item?id=34092566 - Desember 2022
Polars: Fast DataFrame library for Rust and Python - https://news.ycombinator.com/item?id=29584698 - Desember 2021
Polars: Rust DataFrames Based on Apache Arrow - https://news.ycombinator.com/item?id=23768227 - Juli 2020
Saya sudah memakai Pandas selama beberapa tahun, tetapi rasanya selalu seperti mendorong bola ke atas bukit. Bahkan untuk pekerjaan sederhana seperti join pun begitu, dan kita juga tidak boleh lupa mereset indeks
Polars terasa lebih baik daripada Pandas di hampir semua sisi. Lebih cepat, memakai multi-core, lebih hemat memori, dan API-nya lebih intuitif. Memang masih ada kekurangannya karena ini perpustakaan yang relatif muda, tetapi untuk proyek baru setidaknya layak dipertimbangkan
Kemampuan memanfaatkan ekosistem Rust dengan mudah juga luar biasa. Saya sendiri memakai plugin untuk memparalelkan fungsi, dan membuat sebagian kode geospasial menjadi 100 kali lebih cepat
Pada awalnya Pandas sangat dipengaruhi istilah dan pola penggunaan dari R, dan di R kata “merge” memang sudah umum dipakai dengan makna “join”. Kalau saat mulai belajar Pandas sekitar tahun 2015 Anda belum mengenal R, mungkin sulit untuk cepat menguasainya
Query-nya bisa dijalankan bukan hanya di Polars dan Pandas, tetapi juga di mesin eksekusi kompatibel SQL pilihan Anda seperti DuckDB, ClickHouse, BigQuery, Redshift, Postgres, Trino/Presto, SQLite, dan lainnya
Sintaks dan semantik join adalah salah satu bagian yang paling rumit, jadi belakangan ini sedang dibahas lagi. Itu inti dari aljabar relasional, dan juga berlaku untuk R dalam PRQL. Sebagian besar transformasi dasar PRQL hanyalah operasi daftar sederhana seperti map, filter, reduce, tetapi join perlu perhatian khusus jika ingin menjaga komposisi monad. Saya menuliskan beberapa pemikiran di sini: https://github.com/PRQL/prql/issues/3782#issuecomment-1811312787
Isu tersebut memang sudah ditutup, tetapi akan bagus jika Anda membuka isu baru atau menandai @snth untuk menyampaikan pendapat. Sebagai catatan, saya adalah kontributor PRQL
Saat saya evaluasi, keunggulan terbesarnya adalah API-nya jauh lebih konsisten dan mudah dipahami dibanding Pandas. Wajar juga, mengingat Pandas sudah saya pelajari sambil melewati 20 versi mayor
Namun karena jauh lebih jarang dipakai, Copilot tidak terlalu bagus menulis kode Polars. Jadi untuk sekarang saya tetap memakai Pandas dan Copilot. Baru kali ini saya benar-benar merasakan hambatan seperti ini pada perpustakaan baru secara umum
Meski begitu, Copilot belajar sangat cepat di dalam sebuah repositori. Saya memakai stack yang sangat kustom dengan TS-Plus, fork TypeScript yang bahkan pembuatnya sendiri tidak pakai atau rekomendasikan, tetapi Copilot tetap bisa menghasilkan kode TS-Plus yang cukup bagus
Setelah melihat beberapa contoh, menurut saya jangan meremehkan bahwa Copilot bisa menjadi cukup bagus pada tahap penulisan kode yang berulang
Bukan masalah besar karena kita tinggal baca dokumentasi, tetapi tetap merepotkan ketika Copilot tidak bisa langsung mengeluarkan yang dibutuhkan
Saya sudah lama memakai API Pandas dan membencinya. Saya juga termasuk cukup aktif dalam terus meningkatkan cara belajar, alat, pola pikir, dan keterampilan
with_columntelah berubah menjadiwith_columns, lalu menambahkan isi dokumentasi, saya mendapat hasil yang cukup bagus dari ChatGPTSaat Deno merilis dukungan Jupyter,
nodejs-polarsadalah salah satu pustaka inti ilmu data yang didukunghttps://blog.jupyter.org/bringing-modern-javascript-to-the-jupyter-notebook-fc998095081e
Saya pribadi bukan orang dari bidang ilmu data, tetapi mengingat ekosistem JS/Jupyter masih tahap awal, menjalankan analisis berbasis pola.rs di TypeScript terasa sangat cepat dan cukup mengejutkan
Binding JS-nya memang jelas masih perlu banyak perbaikan, tetapi dengan aksesibilitas yang sudah meningkat, saya berharap perbaikan iteratif akan terus terjadi
Polars memang sangat menjanjikan dan performa kecepatannya mengesankan, tetapi membandingkan vaex, modin, dan dask dalam benchmark yang sama terasa mengganggu
Semua pustaka ini ditujukan untuk pemrosesan data di luar memori inti, yaitu ketika datanya begitu besar sampai komputasinya harus tersebar di beberapa mesin. Membandingkannya dengan pustaka dataframe mesin tunggal terasa aneh, dan karena overhead-nya pasti besar, hasilnya tentu lebih lambat
Saya jarang sekali akan memakai Polars dalam konteks yang sama dengan pustaka-pustaka itu, jadi menampilkannya seolah setara dalam benchmark terasa agak lucu. Selain itu, DuckDB, yang bisa dipakai dalam konteks yang sama dengan Polars dan dalam banyak kasus lebih cepat, justru tidak ada di benchmark
Rekayasa perangkat lunak Polars itu pekerjaan yang hebat, dan tidak memerlukan benchmark yang berpotensi menyesatkan seperti ini
Tanpa konfigurasi apa pun, peningkatan performa 2 kali dibanding Pandas bisa didapat, dan pada operasi tertentu saya pernah melihat sampai 5 kali
Saya tidak memakai Polars secara langsung, tetapi menggunakannya sebagai format materialisasi dalam workflow DuckDB
duckdb.query(sql).pl()jauh lebih cepat daripadaduckdb.query(sql).df(). Dengan Polars, ini selesai seketika karena zero-copy, sedangkan di Pandas bisa memakan waktu cukup lama jika DataFrame besar. Selain itu, meski sintaksnya sedikit berbeda, datanya bisa dimanipulasi seperti DataFrame PandasSangat bagus untuk menangani dataset besar
Sepertinya ada akibat lanjut dari hukum kesepuluh Greenspun (https://en.wikipedia.org/wiki/Greenspun's_tenth_rule)): setiap pustaka analisis data yang cukup kompleks pada akhirnya akan mengimplementasikan setengah dari SQL dengan cara yang tambal sulam, spesifikasinya tidak resmi, penuh bug, dan lambat
Saya sesekali memakai Pandas dan mungkin juga akan mencoba ini, tetapi saya selalu merasa akan lebih baik kalau data yang sedang saya kerjakan sejak awal langsung dimasukkan ke Postgres
Saya juga bukan ahli database, dan Python jauh lebih nyaman, tetapi untuk memilih, mengurutkan, memfilter, dan me-join data tabular, SQL jauh lebih unggul
duckdb-prqlDuckDB memungkinkan data berformat Polars, Pandas, dan Arrow diproses langsung dengan SQL tanpa perlu menyalin atau menduplikasi data
duckdb-prqlmemungkinkan penggunaan PRQL (prql-lang.org), dan menurut saya ini menggabungkan kekuatan serta universalitas SQL dengan rasa pakai dan pengalaman pengembang ala Polars atau Pandas. Sebagai catatan, saya adalah kontributor PRQLSebagai gantinya, DuckDB layak dilihat. Implementasi SQL-nya bukan tambal sulam, bukan penuh bug, bukan lambat, dan juga tidak tidak lengkap. Saya kurang tahu soal seberapa formal spesifikasinya, tetapi kompatibel dengan Polars
Untuk jenis kueri yang dijalankan di engine seperti ini, Postgres kemungkinan akan lebih lambat beberapa kali lipat dibanding mesin kueri OLAP
Ini pendekatan yang lebih baik untuk memakai Python dataframe dan SQL bersama-sama
Beberapa bulan lalu saya mencoba memindahkan codebase Pandas yang besar ke Polars. Saya memang tidak terlalu suka melakukan analisis atau data pipelining di Python, tetapi transformasi yang kompleks di Pandas memakan waktu 2~5 kali lebih lama dibanding Julia atau R (dengan dataframes.jl, dplyr)
Sayangnya Polars juga bukan jawabannya. Terlalu banyak bug pada operasi standar, dan interoperabilitas dengan Pandas tidak stabil. Ini menjadi masalah karena banyak pustaka mengharuskan Pandas DataFrame sebagai input. API-nya juga sangat bertele-tele untuk ukuran pustaka dataframe modern, meski tetap lebih baik daripada Pandas
Saya berharap ini membaik seiring waktu, tetapi untuk saat ini yang paling baik adalah memakai DuckDB di atas Pandas. Secepat Polars, tetapi lebih stabil dan interoperabilitasnya juga lebih baik
Suatu hari nanti saya berharap ekosistem dataframe Python bisa mencapai titik seperti R, di mana pustaka dataframe berorientasi analisis dengan API yang intuitif (dplyr) dan pustaka dataframe berperforma tinggi (data.table) bisa dipakai bersama dengan mudah
Saya mungkin tidak akan memakainya untuk exploratory data analysis atau riset, tetapi saya mulai memakainya di beberapa skrip produksi karena performanya yang lebih baik
Kombinasi dplyr + data.table di R masih menjadi pengalaman manipulasi data yang paling saya sukai. Hanya saja saya berharap ada sesuatu seperti Matplotlib di R. ggplot terlalu high-level dan grafik dasarnya terlalu low-level. Scikit-Learn juga jauh lebih modular daripada Caret, jadi saya tidak terlalu merindukan Caret
Menurut saya, ini menggabungkan pengalaman pengembang dari dplyr, Polars, dan Pandas dengan kekuatan serta universalitas SQL. Kuerinya bisa dijalankan di mesin eksekusi kompatibel SQL mana pun yang Anda inginkan, seperti Polars, Pandas, DuckDB, ClickHouse, BigQuery, Redshift, Postgres, Trino/Presto, SQLite, dan lainnya
Saya ingin mendengar pendapat Anda di diskusi GitHub (https://github.com/PRQL/prql/discussions) atau Discord (https://discord.com/invite/XWxbCrWr). Sebagai catatan, saya adalah kontributor PRQL
Tim data science kami pernah mengevaluasi Polars, tetapi hasilnya beragam. Jika ada bagian yang sangat membutuhkan performa, kami akan mempertimbangkan untuk mengadopsinya, tetapi selain itu kami agak negatif karena biaya mengganti Pandas di puluhan proyek
API-nya masih memiliki perubahan breaking yang cukup bisa diperkirakan, dan jika dipakai lintas banyak proyek, itu bisa menjadi beban pemeliharaan. Meski begitu, API-nya sudah terasa lebih konsisten, dan secara keseluruhan tampaknya bergerak ke arah yang benar
Terutama karena biaya interoperabilitas dengan Pandas sangat rendah, dan jika memakai backend Arrow, transisi zero-copy ke Pandas juga cukup mudah