トップ / 実行・アクション・IO

to_local_iterator

結果を全件メモリに載せず、1行(またはチャンク)ずつ順番に処理する。

SNOWPARK 静的検証のみ

for row in df.to_local_iterator():
    process(row)

POLARS 実行確認済み

for row in ldf.collect().iter_rows(named=True):
    process(row)

挙動・設計の違い

Snowparkのto_local_iterator()は結果をチャンク単位でストリーミングダウンロードしながらイテレータとして渡すため、全件を一度にメモリへ載せずに済む。Polarsのiter_rows()collect()で確定させたDataFrameの行を1行ずつ取り出すイテレータで、実行して動作を確認済み。ただしcollect()の時点で全件がすでにメモリ上に確定している点がSnowpark側とは異なる。

移行時の落とし穴

「メモリを使わずに巨大データを順次処理する」という目的であればPolars側は完全に同じ効果を持たない。Snowparkのto_local_iteratorはクエリ結果自体をチャンク単位で取り出すのに対し、Polarsのiter_rows()はすでにcollect()でメモリに載った結果を1行ずつ取り出すだけなので、collect()の時点でメモリ制約に引っかかる可能性がある。Polarsで本当に巨大データをメモリを使わず処理したい場合は、sink_parquet等のストリーミング書き出し(次の書き込み系のページを参照)を検討する。

実行・アクション・IOの他のメソッド

出典・検証情報

Polars 1.43.2 で実行確認 / Snowpark Python SDK 1.54.0 で静的検証(2026-08-26)