4 poin oleh GN⁺ 2024-01-09 | 1 komentar | Bagikan ke WhatsApp
  • 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');
  • 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

 
GN⁺ 2024-01-09
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

    • Ini adalah kekurangan menjengkelkan dari banyak produk teknis. Wajar kalau mereka ingin berbicara kepada pembaca sasaran, dalam hal ini data scientist yang menyukai Pandas tetapi merasa Pandas lambat dan tidak cukup fleksibel, tetapi bagi pemula ini memberi kesan seperti ditolak
      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/
    • Ini Pandas tapi cepat. Pandas adalah library dataframe open source yang asli, kokoh dan dipakai luas, tetapi cakupannya besar dan tampaknya lebih lambat daripada pendatang baru ini. Istilah “dataframe” sendiri sudah menjadi sinyal langsung bagi orang yang pernah memakainya
    • Setiap kali melihat halaman seperti ini, saya merasa direndahkan. “Dataframes for the new Era”, sampai saya bertanya-tanya apakah saya benar-benar tahu apa itu dataframe, lalu saat melihat “multithreaded query engine” saya jadi bertanya apakah ini semacam database
      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
    • Kalau mau adil, judul halamannya memang “Dataframes for the new Era”, dan tautan Get Started di bawah judul mengarah ke dokumentasi di halaman GitHub. GitHub itu menjelaskan kepada orang dengan latar analisis data tentang apa library ini: https://github.com/pola-rs/polars
    • Saya sekarang sedang terseret ke dunia “data”, dan tempat ini terasa seperti alam semesta paralel dengan latar belakang dan budayanya sendiri. Banyak ungkapan yang rasanya seperti “hubungkan ke instance Antelope atau Meringue dengan usability dari Nincompoop dan performa ARSE2”
      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

    • Agak ironis menjadikan join sebagai contoh. Menurut saya masalah terbesar Pandas selalu dokumentasinya. Misalnya, apakah Anda tahu bahwa ada cara menggabungkan dataframe tanpa memakai indeks? Namanya bukan “join”, melainkan merge
      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
    • Saya penasaran bagaimana pendapat Anda tentang PRQL(prql-lang.org). Secara pribadi, saya melihatnya sebagai gabungan antara pengalaman penggunaan dan pengalaman pengembang dari Polars atau Pandas dengan kekuatan dan universalitas SQL
      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
    • Saya penasaran apa yang sebenarnya sulit dari penggabungan dataframe di Pandas
  • 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

    • Ini pertama kalinya saya melihat seseorang secara terbuka bilang lebih menyukai perpustakaan karena dukungan Copilot. Bukan menghakimi, cuma menarik
      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
    • Dukungan Copilot itu masalah ayam dan telur. Ia harus belajar dari kode orang lain, tetapi kalau orang tidak menulis kode Polars tanpa Copilot, maka Copilot juga tidak akan pernah jadi lebih baik dalam menulis kode Polars
    • Saya mengalami hal serupa saat memakai danfo.js, perpustakaan dataframe lain untuk js. Copilot cuma berhalusinasi soal fitur dan nama metode
      Bukan masalah besar karena kita tinggal baca dokumentasi, tetapi tetap merepotkan ketika Copilot tidak bisa langsung mengeluarkan yang dibutuhkan
    • Jadi Anda mengakui API-nya lebih konsisten dan mudah dipahami, tetapi tetap memilih bertahan di Pandas hanya karena Copilot lebih memudahkan? Baik untuk diri Anda sendiri maupun demi inovasi open source, lebih baik memakai alat yang menurut Anda memang lebih baik
      Saya sudah lama memakai API Pandas dan membencinya. Saya juga termasuk cukup aktif dalam terus meningkatkan cara belajar, alat, pola pikir, dan keterampilan
    • Perpustakaan Polars berubah cepat. Saya tidak memakai Copilot, tetapi dengan memasukkan informasi terbaru ke instruksi sistem, misalnya bahwa with_column telah berubah menjadi with_columns, lalu menambahkan isi dokumentasi, saya mendapat hasil yang cukup bagus dari ChatGPT
  • Saat Deno merilis dukungan Jupyter, nodejs-polars adalah salah satu pustaka inti ilmu data yang didukung
    https://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

    • Saya selalu menginginkan sesuatu seperti Pandas di JS, baru tahu soal ini sekarang
  • 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

    • Saya tidak tahu soal yang lain, tetapi Dask bisa dipakai juga di mesin tunggal, dan itu bahkan cara termudah memakainya. Dataframe dibagi ke dalam partisi dan diproses di tiap core untuk memparalelkan operasi
      Tanpa konfigurasi apa pun, peningkatan performa 2 kali dibanding Pandas bisa didapat, dan pada operasi tertentu saya pernah melihat sampai 5 kali
    • Ibis, dataframe Python buatan pencipta Pandas, memakai DuckDB sebagai backend default, dan biasanya mengalahkan Polars dalam benchmark seperti ini, kecuali untuk beberapa pengecualian query
  • Saya tidak memakai Polars secara langsung, tetapi menggunakannya sebagai format materialisasi dalam workflow DuckDB
    duckdb.query(sql).pl() jauh lebih cepat daripada duckdb.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 Pandas
    Sangat 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

    • Saya merekomendasikan untuk melihat DuckDB dan ekstensi duckdb-prql
      DuckDB memungkinkan data berformat Polars, Pandas, dan Arrow diproses langsung dengan SQL tanpa perlu menyalin atau menduplikasi data
      duckdb-prql memungkinkan 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 PRQL
    • Bisa saja begitu, tetapi jika yang dimaksud adalah kueri “analitis”, performanya kemungkinan akan jauh lebih buruk dan fleksibilitas serta daya ekspresinya juga akan menurun
      Sebagai 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
    • Secara pribadi, sintaks lazy dataframe jauh lebih unggul sebagai frontend untuk query engine. Polars juga mendukung SQL, tetapi bug biasanya muncul bukan di frontend melainkan di query engine
      Untuk jenis kueri yang dijalankan di engine seperti ini, Postgres kemungkinan akan lebih lambat beberapa kali lipat dibanding mesin kueri OLAP
    • Pencipta Pandas membuat Ibis dengan backend Postgres karena alasan ini: https://ibis-project.org/backends/postgresql
      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 juga kesal dengan sifatnya yang bertele-tele. Dibandingkan sesuatu seperti data.table, Pandas sendiri sudah cukup bertele-tele, tetapi Polars terasa lebih seperti memakai API daripada “alat manipulasi data”
      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
    • Saya penasaran bagaimana pendapat Anda tentang PRQL (prql-lang.org). Tujuannya adalah memberi rasa pakai dplyr di mana pun SQL digunakan, dan ia dikompilasi ke SQL
      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
    • Senang mendengar Anda punya pengalaman memakai dataframe di R, Python, dan Julia. Di antara semuanya, saya penasaran mana yang paling Anda sukai. Ekosistemnya mungkin tidak bisa dibandingkan secara langsung, tetapi jika dilihat dari pekerjaan seperti operasi inti, mana yang menurut Anda paling baik?
    • Ibis dengan backend DuckDB juga layak dicoba. Secara pribadi saya juga cukup menyukai Polars. Para pengembangnya secara umum merespons isu dengan sangat cepat
  • 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

    • Menurut saya penilaian itu tepat. Saat ini bukan waktunya mengganti Pandas yang sudah berjalan baik, melainkan waktunya bereksperimen
      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
    • Sebaiknya jangan menulis ulang seluruh kode. Namun, untuk kode baru, ini layak diadopsi atau dievaluasi
      Terutama karena biaya interoperabilitas dengan Pandas sangat rendah, dan jika memakai backend Arrow, transisi zero-copy ke Pandas juga cukup mudah
    • Ke depannya ada https://github.com/fugue-project/fugue
    • Saya penasaran apakah tim menggunakan pandasql, atau kebanyakan langsung memakai API Pandas