Bekerja dengan file Parquet

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Liam Brannigan

Data Scientist & Polars Contributor

Format penyimpanan file

Diagram sebuah DataFrame

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Format CSV

Diagram yang menunjukkan CSV sebagai penyimpanan per baris, tiap rekaman disimpan sepanjang satu baris.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Format Parquet

Diagram yang menunjukkan Parquet sebagai penyimpanan terorientasi kolom, nilai dalam kolom yang sama dikelompokkan.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Mengonversi arsip

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

)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Mengonversi arsip

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memeriksa file Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

CSV vs Parquet

$$

CSV
  • 4,8 GB
  • 14 detik

$$

Parquet
  • 0,6 GB
  • 1,4 detik

ilustrasi csv vs parquet

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Parquet bukan untuk menambah baris

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV untuk penambahan baris
  • Parquet untuk pembacaan
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Grup baris Parquet

Diagram menunjukkan file Parquet dibagi dalam grup baris.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Penyaringan dengan grup baris

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Grup baris Parquet

Diagram file Parquet dengan grup baris.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Grup baris Parquet

Diagram file Parquet dengan grup baris dan statistik.

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memindai dengan strategi paralel

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",

    )
)
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Memindai dengan strategi paralel

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Mengatur penulisan Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,

)
  • Ukuran file lebih kecil
  • Waktu baca/tulis lebih lama
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Mengatur penulisan Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Ukuran file lebih kecil
  • Waktu baca/tulis lebih lama
  • Statistik yang dibaca lebih banyak
Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Ayo berlatih!

Menskalakan dan Mengoptimalkan Pipeline Data dengan Polars

Preparing Video For Download...