認識 lazy 模式

Polars 入門

Liam Brannigan

Data Scientist & Polars Contributor

Eager 模式

(
    pl.read_csv("vacation_rentals.csv")


)
  • 載入 CSV 到 DataFrame

Lazy 模式

Polars 入門

Eager 模式

(
    pl.read_csv("vacation_rentals.csv")


)
  • 載入 CSV 到 DataFrame

Lazy 模式

(
    pl.scan_csv("vacation_rentals.csv")


)
  • 啟動「query plan」
  • 讀取 CSV 前幾列
Polars 入門

Eager 模式

(
    pl.read_csv("vacation_rentals.csv")


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

Lazy 模式

(
    pl.scan_csv("vacation_rentals.csv")


)
naive plan: 

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

Eager 模式

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

)

Lazy 模式

Polars 入門

Eager 模式

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

)

Lazy 模式

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

)
  • 更新 query plan
  • 最佳化 query plan
Polars 入門

最佳化的查詢計畫

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

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

執行 lazy 查詢

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

Eager 模式 vs. Lazy 模式

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

)
  • 逐步執行
(
    pl.scan_csv("vacation_rentals.csv")
    .select("name","price")
    .collect()
)
  • 一次執行完整查詢
Polars 入門

Eager 模式 vs. Lazy 模式

一隻奔跑的 Polar 熊與一隻睡覺的 Polars 熊

  • 步步執行:eager 模式
  • 除錯方便:eager 模式
  • 效能最佳化:lazy 模式
Polars 入門

一起來練習吧!

Polars 入門

Preparing Video For Download...