トップ / 実行・アクション・IO
結果を全件メモリに載せず、1行(またはチャンク)ずつ順番に処理する。
for row in df.to_local_iterator():
process(row)
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等のストリーミング書き出し(次の書き込み系のページを参照)を検討する。
Polars 1.43.2 で実行確認 / Snowpark Python SDK 1.54.0 で静的検証(2026-08-26)