使用方法
Lazy API を使うと、Polars は各クエリを行ごとに実行するのではなく、クエリ全体をエンドツーエンドで処理します。Polars を最大限に活用するには、以下の理由から Lazy API を使うことが重要です:
- Polars がクエリオプティマイザーを利用し、自動クエリ最適化ができます。
- ストリーミング機能を使ってメモリ以上のサイズのデータセットを扱えます。
- データ処理の前にスキーマエラーを検出できます。
ここでは、ファイルまたは既存の DataFrame
から Lazy API を使う方法を見ていきます。
ファイルから Lazy APIを使う
クエリオプティマイザーがファイルから読み込むデータ量を削減できるため、理想的にはファイルから Lazy API を使うのが良いでしょう。
Reddit の CSV データから Lazy クエリを作成し、いくつかの変換を適用します。
pl.scan_csv
からクエリを始めることで、Lazy API を使います。
scan_csv
· with_columns
· filter
· col
q1 = (
pl.scan_csv(f"docs/data/reddit.csv")
.with_columns(pl.col("name").str.to_uppercase())
.filter(pl.col("comment_karma") > 0)
)
pl.scan_
関数は、CSV、IPC、Parquet、JSON などの様々なファイル形式に対応しています。
このクエリでは、Polars に以下を指定しています:
- Reddit の CSV ファイルからデータを読み込みます
name
列を大文字に変換しますcomment_karma
列にフィルターを適用します
この Lazy クエリはこの時点では実行されません。Lazy クエリの実行については Lazy クエリの実行 のページを参照してください。
DataFrame
から Lazy APIを使う
Lazy API にアクセスする別の方法は、メモリ上に作成済みの DataFrame
に対して .lazy
を呼び出すことです。
q3 = pl.DataFrame({"foo": ["a", "b", "c"], "bar": [0, 1, 2]}).lazy()
.lazy
を呼び出すことで、DataFrame
を LazyFrame
に変換します。