レイジーモードの紹介

Polars入門

Liam Brannigan

Data Scientist & Polars Contributor

イーガーモード

(
    pl.read_csv("vacation_rentals.csv")


)
  • CSVをDataFrameに読み込み

レイジーモード

Polars入門

イーガーモード

(
    pl.read_csv("vacation_rentals.csv")


)
  • CSVをDataFrameに読み込み

レイジーモード

(
    pl.scan_csv("vacation_rentals.csv")


)
  • クエリ計画を開始
  • CSVの先頭行を読み取る
Polars入門

イーガーモード

(
    pl.read_csv("vacation_rentals.csv")


)
| name     | type    | ... | beach |
| ---      | ---     | ... | ---   |
| str      | str     | ... | bool  |
|----------|---------| ... |-------|
| Waves    | Cottage | ... | false |
| Seashell | Cottage | ... | true  |
| ...      | ...     | ... | ...   |

レイジーモード

(
    pl.scan_csv("vacation_rentals.csv")


)
naive plan: 

Csv SCAN [vacation_rentals.csv]
PROJECT */8 COLUMNS
Polars入門

イーガーモード

(
    pl.read_csv("vacation_rentals.csv")
    .select("name","price")

)

レイジーモード

Polars入門

イーガーモード

(
    pl.read_csv("vacation_rentals.csv")
    .select("name","price")

)

レイジーモード

(
    pl.scan_csv("vacation_rentals.csv")
    .select("name","price")

)
  • クエリ計画を更新
  • クエリ計画を最適化
Polars入門

最適化されたクエリ計画

print(
    pl.scan_csv("vacation_rentals.csv")
    .select("name","price")
    .explain()
)
Csv SCAN [vacation_rentals.csv]

PROJECT 2/8 COLUMNS
  • 最適化: projection pushdown
Polars入門

レイジークエリの実行

(
    pl.scan_csv("vacation_rentals.csv")
    .select("name","price")
    .collect()
)
shape: (49, 2)
| name      | price |
| ---       | ---   |
| str       | i64   |
|-----------|-------|
| Waves     | 540   |
| Seashells | 540   |
| ...       | ...   |
Polars入門

イーガー vs. レイジー

(
    pl.read_csv("vacation_rentals.csv")
    .select("name","price")

)
  • 行ごとに実行
(
    pl.scan_csv("vacation_rentals.csv")
    .select("name","price")
    .collect()
)
  • クエリ全体を実行
Polars入門

イーガー vs. レイジー

走るPolar Bearと眠るPolars Bear

  • 手順ごと: イーガー
  • デバッグ: イーガー
  • 高速化: レイジー
Polars入門

Let's practice!

Polars入門

Preparing Video For Download...