Akış ve GPU motorlarıyla çalışma

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Liam Brannigan

Data Scientist & Polars Contributor

Sorgu yürütme motorları

Bir sorgunun API'den sorgu iyileştiricisi aracılığıyla bellek içi motora gidişini gösteren akış diyagramı.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu yürütme motorları

Bir sorgunun API'den sorgu iyileştiricisi aracılığıyla bellek içi motora gidişini gösteren akış diyagramı.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu yürütme motorları

Bir sorgunun API'den sorgu iyileştiricisi aracılığıyla bellek içi ve akış motorlarına gidişini gösteren akış diyagramı.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu yürütme motorları

Bir sorgunun API'den sorgu iyileştiricisi aracılığıyla bellek içi, akış ve GPU motorlarına gidişini gösteren akış diyagramı.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Tembel bir istek özeti

requests = pl.scan_parquet("311_Service_Requests.parquet")

query = (
    requests
    .filter(pl.col("STATUS") == "Completed")
    .group_by("DEPARTMENT")
    .len()
    .sort("len", descending=True)
)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Varsayılan motoru kullanma

query.collect()
shape: (5, 2)
| DEPARTMENT        | len     |
| ---               | ---     |
| str               | u32     |
|-------------------|---------|
| 311 City Services | 4859161 |
| Sanitation        | 3406631 |
| Aviation          | 2337842 |
| Transportation    | 1468240 |
| Water             | 416535  |
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Akış motorunu hedefleme

query.collect(
    engine="streaming"
)
shape: (5, 2)
| DEPARTMENT        | len     |
| ---               | ---     |
| str               | u32     |
|-------------------|---------|
| 311 City Services | 4859161 |
| Sanitation        | 3406631 |
| Aviation          | 2337842 |
| Transportation    | 1468240 |
| Water             | 416535  |
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Akış motorunu hedefleme

Büyük bir tablonun akışla işlendiği görsel.

  • Desteklenmeyen akış adımları otomatik olarak varsayılan motora döner
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Akış motorunu hedefleme

import polars as pl
pl.Config.set_engine_affinity("streaming")
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

GPU motorunu hedefleme

query.collect(
    engine="gpu"
)

$$

  • NVIDIA GPU donanımı gerektirir
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Motor seçimi

$$

  • Önce varsayılan motor; bellek sorunu varsa geçiş yapın

$$

  • Akış: belleğe sığmayan büyük sorgular için

$$

  • GPU: hız için, ancak yalnızca NVIDIA donanımı varsa

Bir motor seçme

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Partilerle çalışma

completed_requests = (
    requests
    .filter(pl.col("STATUS") == "Completed")
    .select("SR_NUMBER", "TYPE", "DEPARTMENT", "CREATED_DATE")
)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Her partiyi işleme

for batch in completed_requests.collect_batches(

):


Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Her partiyi işleme

for batch in completed_requests.collect_batches(
    chunk_size=50_000,
):


Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Her partiyi işleme

for batch in completed_requests.collect_batches(
    chunk_size=50_000,
):
    print(batch.shape)
    batch_json = batch.write_json()
(50000, 4)
(50000, 4)
...
(50000, 4)
(12409, 4)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Hadi pratik yapalım!

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Preparing Video For Download...