介绍惰性模式

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")


)
  • 启动查询计划
  • 读取 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")

)
  • 更新查询计划
  • 优化查询计划
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. 惰性模式

一只奔跑的北极熊和一只睡觉的 Polars 熊

  • 步进式:即时模式
  • 调试:即时模式
  • 性能优化:惰性模式
Polars 入门

Passons à la pratique !

Polars 入门

Preparing Video For Download...