· kaynak Hacker News – Front Page (hnrss.org)
Polars 2.0 streaming'i varsayılan yapıyor, out-of-core spilling ve birinci sınıf SQL ekliyor
Polars 2.0, streaming motoru varsayılan olarak açık ve out-of-core spilling etkin halde geliyor; SQL'ı DuckDB ve DataFusion'a karşı benchmark zaferleriyle birinci sınıf bir arayüz haline getiriyor ve yerel bir Map dtype ekliyor.

Polars projesi, dataframe kütüphanesinin 2.0 sürümünü yayımladı; uyumluluk odaklı bir sürüm artışı olarak planlanan şey, büyük bir özellik sürümüne dönüştü. 6 Ekim'de Hacker News ana sayfasına ulaşan pola.rs'deki duyuru yazısına göre öne çıkanlar şunlar: varsayılan out-of-core yürütme, çekirdek motor genelinde kapsamlı performans çalışmaları, birinci sınıf bir arayüz olarak SQL, yeni bir Map veri tipi ve dtype'ların daha katı işlenmesi.
Streaming ve diske taşıma varsayılan oluyor
Polars ekibinin kendisinin en yüksek etkili değişiklik olarak nitelendirdiği şey, bir LazyFrame üzerinde collect çağrısının artık varsayılan olarak streaming motoru üzerinden çalışması; yazıya göre bu, çoğu sorguda büyük bellek ve performans iyileştirmeleri getiriyor. Bu aynı zamanda sürümün büyük sürüm numarası gerektirmesinin ana nedeni: streaming motoru belirli işlemlerde — join, group_by ve unpivot sayılıyor — satır sırasını garanti etmiyor, dolayısıyla gözlemlenebilir sıralamaya bağlı olan kodun açıkça maintain_order=True ile geri dönmesi gerekiyor.
Bellek baskısı altında diske taşıma anlamına gelen out-of-core yürütme de varsayılan olarak etkin. Yazıya göre taşıma, kullanılabilir RAM'in yaklaşık %80'inde başlıyor — ekip bu eşiğin ayarlanmaya ihtiyaç duyabileceğini kabul ediyor — ve varsayılan disk bütçesi 64GB. Sıralama, window fonksiyonları ve birçok ifade şu anda diske taşınabiliyor; join ve group_by işlemlerine daha sonra out-of-core desteği gelmesi bekleniyor; ekip bunun kütüphaneyi bellek yoğun iş yükleri için daha dayanıklı hale getireceğini savunuyor.
Tedarikçi benchmark'larıyla desteklenen, birinci sınıf vatandaş olarak SQL
Polars 2.0, SQL'ın kütüphaneyle veri sorgulamanın birinci sınıf bir yolu olarak görüldüğü noktayı işaret ediyor. SQL kapsamı son aylarda keskin biçimde büyüdü ve yazı, bu iş yüklerinin hızlı çalışmasını sağlayan şeyin optimizer çalışmaları — join yeniden sıralama, çok daha iyi common-subplan elimination ve bloom filter'larla dinamik predicate'ler — olduğunu belirtiyor.
Bunu desteklemek için ekip, Polars SQL'i TPC-H ve TPC-DS türevi veriler üzerinde DuckDB 1.5.6, bir DuckDB 2.0 alpha derlemesi ve DataFusion 54.0.0 ile karşılaştırarak benchmark'lardan geçirdi; testler 16 vCPU'lu, 32GB'lık bir c7a.4xlarge instance'ında ve 192 vCPU'lu, 384GB'lık bir c7a.metal makinesinde yapıldı. Her sorgu beş kez, hot bir ortamda, 60 saniyelik zaman aşımıyla ayrı bir süreçte çalıştırıldı; en iyi çalışma alındı ve motorlar hem sorgu sürelerinin toplamı hem de geometrik ortalaması üzerinden karşılaştırıldı.
Ekibe göre, varsayılan Polars bir benchmark dışında tümünde en hızlıydı. Yazı bir uyarı hakkında açık sözlü: Polars 192 thread'e ölçeklenirken sabit bir overhead taşıyor ve bu, küçük verili sorguları olumsuz etkiliyor; 32 core ile sınırlanan Polars ise her yerde rekabetçiydi ya da kazanıyordu. Ekip sorunun nedeninin teşhis edildiğini ve bir düzeltmeyi sonraki sürümde sunmayı umduğunu söylüyor. DataFusion, küçük makinede TPC-DS sorgu 72'de (ve bir kez sorgu 67'de) zaman aşımına uğradı ve TPC-H sorgu 18'de belleği tükendi; bu sorgular her motor için hariç tutuldu. Bunlar tedarikçi tarafından yürütülen benchmark'lar olduğu için, ekibin herkese açık bir benchmark deposu paylaşması ve başkalarını sonuçları yeniden üretmeye teşvik etmesi önemli.
Yerel bir Map dtype ve daha katı semantikler
Polars artık Arrow MapType'ı doğrudan bir Map dtype olarak destekliyor — kavramsal olarak anahtarları değerlere eşleyen bir Python sözlüğü — oysa daha önce bu, anahtar/değer struct'ları listesi olarak okunuyordu. Yeni tip, sözlük tarzı erişim için ayrılmış ifadelerle geliyor: sabit anahtarların veya başka bir sütundan alınan anahtarların aranması, bir anahtarın var olup olmadığının kontrol edilmesi ve uzunlukların, anahtar listelerinin ve değer listelerinin alınması.
Sürüm ayrıca katılığa da ağırlık veriyor. Belirtilen felsefe şudur: hatalar bir pipeline'ın yirminci dakikasında değil, en başta ortaya çıkmalı ve veri uyuşmazlıklarındaki örtük davranış varsayılan değil, opt-in olmalıdır; çünkü uyuşmazlıklar hataları gizleyebilir. Ekip bunu, yapay zeka destekli geliştirme için değerli olarak açıkça çerçeveliyor: agent'lar ve insanlar, hiçbir veriyi materialize etmeden tipleri çözmek ve şema düzeyindeki uyuşmazlıkları yakalamak için collect_schema() çağırarak geri bildirim döngülerini kısaltabiliyor. Hataların yalnızca gerçek verilere karşı yakalanabildiği durumlarda Polars artık sessizce tutarsız sonuçlar üretmek yerine daha katı davranışa varsayılan olarak yöneliyor.
Sırada ne var
Yazıya göre yol haritasında daha iyi out-of-core desteği, yüksek CPU sayılarında iyileştirilmiş ölçekleme, Polars Cloud'u mevcut en hızlı dağıtık motor yapma yönünde bir itiş ve bir GeoPolars projesi üzerindeki erken çalışmalar yer alıyor. Sürüme bir göç rehberi eşlik ediyor ve sorunlar projenin GitHub issue takipçisinde bildirilebilir.
Neden önemli
Polars, Python ve Rust veri ekosistemlerinde en yaygın benimsenen dataframe kütüphanelerinden biri haline geldi ve 2.0, mevcut pipeline'ları sessizce etkileyebilecek şekilde varsayılan davranışı değiştiriyor — özellikle streaming motoru altındaki satır sıralaması, göç rehberini yükseltme öncesi zorunlu okuma haline getiriyor. Varsayılan out-of-core yürütme, bellekten büyük veri kümeleriyle çalışmanın önündeki engeli düşürürken, birinci sınıf SQL Polars'ı DuckDB ve DataFusion ile daha doğrudan rekabete sokuyor. TPC benchmark iddiaları ekibin kendi iddiaları, ancak yayımlanan metodoloji ve yeniden üretim deposu bağımsız incelemeye davet ediyor. Daha katı şema kontrolü ise bir veri kütüphanesinin agentic coding iş akışları için bilinçli olarak tasarlanmasının dikkat çekici bir örneği.
- #polars
- #dataframe
- #data-engineering
- #rust
- #sql