トップ / 基礎知識
どちらも遅延評価を採用しているが、計算がどこで走るか(クラウドかローカルか)が根本的に異なります。使い分けの軸を整理します。
Snowpark DataFrameとPolars LazyFrameは、どちらも「評価をできるだけ先延ばしにして、まとめて最適化する」という遅延評価の設計思想を共有しています。このサイトの各メソッドページで頻繁に「両方とも遅延評価で……」という説明が出てくるのはこのためです。
共通点はここまでで、実行される場所は対照的です。
Snowparkはネットワークの向こう側にあるクラウドの計算資源を使い、ペタバイト級のデータをマルチノードで処理できます。Polarsは基本的に手元の1台のマシン(マルチコアで並列化)で完結する処理で、外部にデータを送信しません。
同じ「フィルタ→集計→並べ替え→上位N件」という処理を書くと、両者の構文は非常に近くなります。
# Polars(手元のマシンで実行)
result = (
df.filter(pl.col("amount") > 100)
.group_by("customer_id")
.agg(pl.col("amount").mean().alias("avg_amount"))
.sort("avg_amount", descending=True)
.limit(10)
)
print(result.collect())
# Snowpark(Snowflakeのウェアハウスで実行)
result = (
df.filter(col("amount") > 100)
.group_by("customer_id")
.agg(F.avg("amount").alias("avg_amount"))
.sort(col("avg_amount").desc())
.limit(10)
)
result.show()
上のPolars側のコードは実際に実行し、customer_id=2の平均200・customer_id=1の平均150という結果になることを確認済みです。式の組み立て方(colで列を指定し、メソッドをチェーンする)まで含めてほとんど同じ書き方に見えますが、result.collect()が実行された瞬間にどちらのマシンで計算が走るかがまったく違う、という点がこのページの主題です。
遅延評価を実際に実行させる「引き金」のメソッドも異なります。
collect() / show() / save_as_table() などcollect() / sink_parquet() / sink_csv() など(sink_*系はストリーミングで直接ファイルへ書き出す)Polars側の collect・sink_parquet・sink_csv・sink_ipc・sink_ndjson は、いずれも LazyFrame に実在するメソッドであることを実機で確認済みです。
to_pandas()で結果をpandas DataFrameに変換すれば、その後はローカルのエコシステム(Polarsやmatplotlib等)に接続できます。公式ドキュメントの記載にもとづく解説です(実行検証はしていません)。確認日:2026-08-27