Eksekusi kueri yang efektif

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Liam Brannigan

Data Scientist & Polars Contributor

Kenali instruktur Anda

$$

$$

  • Liam Brannigan, Lead Data Scientist
  • Spesialis ML dan Data Engineering
  • Kontributor Polars

Foto Liam Brannigan - instruktur kursus ini

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Dari laptop ke cloud

Pipeline Polars berskala dari laptop ke cloud

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Apakah kursus ini untuk Anda?

Halaman kursus Polars

  • Membuat kueri lazy dengan scan_csv
  • Menulis ekspresi dengan filter, select, dan group_by
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Bab 1 - optimisasi

Optimisasi kueri

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Bab 1 - optimisasi

Optimisasi kueri

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Bab 2 - I/O efektif

Gambar Polars mengimpor berbagai tipe file

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Bab 3 - dtype lebih kaya

Diagram data bertingkat diubah menjadi tabel.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Bab 4 - skala pipeline

Gambar tabel besar yang di-stream.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Dataset permintaan Chicago

Tim analitik data Wali Kota Chicago

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memeriksa dataset

requests = pl.scan_csv("311_Service_Requests.csv",try_parse_dates=True)

Dataset masif yang mencatat setiap permintaan layanan warga Chicago

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memeriksa dataset

requests.collect()
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memeriksa dataset

requests.collect().head(5)
shape: (5, 39)
| TYPE                          | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                           | ---       | ---            | ---                 | --- |
| str                           | str       | str            | str                 | ... |
|-------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint   | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request             | Cancelled | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance      | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint   | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up             | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Membatasi baris yang diproses

requests.head(5)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Membatasi baris yang diproses

requests.head(5).collect()
shape: (5, 39)
| TYPE                            | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                             | ---       | ---            | ---                 | --- |
| str                             | str       | str            | str                 | ... |
|---------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint     | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request | Completed | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance        | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint     | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up               | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
  • Tunda pemanggilan collect
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department


Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department = requests


Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect()
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect().group_by("DEPARTMENT").len()
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Kueri ringkasan per departemen

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len().collect()
shape: (10, 2)
| DEPARTMENT                     | len     |
| ---                            | ---     |
| str                            | u32     |
|-------------------------------|---------|
| 311 City Services              | 4859161 |
| Sanitation                     | 3406631 |
| Aviation                       | 2337842 |
| CDOT - Department of Transport | 1468240 |
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Cabang kueri yang menyimpang

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len()
completed_by_month = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("MONTH").len()
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Cara tim menjalankannya saat ini

completed_by_department.collect()
completed_by_month.collect()
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Menjalankan kueri bercabang

results = pl.collect_all(


)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Menjalankan kueri bercabang

results = pl.collect_all([
    completed_by_department,
    completed_by_month,
])
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Menjalankan kueri bercabang

results[0]  # completed_by_department
shape: (10, 2)
| DEPARTMENT           | len     |
| ---                  | ---     |
| str                  | u32     |
|----------------------|---------|
| 311 City Services    | 4859161 |
| Sanitation           | 3406631 |
| Aviation             | 2337842 |
| Transport            | 1468240 |
results[1]  # completed_by_month
shape: (12, 2)
| MONTH | len  |
| ---   | ---  |
| i64   | u32  |
|-------|------|
| 1     | 2506 |
| 2     | 4566 |
| 3     | 2739 |
| 4     | 2922 |
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Ayo berlatih!

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Preparing Video For Download...