問題タブ [fastparquet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - メモリ効率の良い方法で Python のストリームから Parquet ファイルを作成する
Python で Parquet ファイルを作成する最も一般的な方法は、最初に Pandas データフレームを作成し、次に pyarrow を使用してテーブルを parquet に書き込むことです。pandas データフレームを作成するには、データセットの完全なコピーを少なくとも1 つメモリに保存する必要があるため、これはメモリ使用量に過度に負担をかけるのではないかと心配しています。
列圧縮の要件のためにデータセット全体をメモリにロードする必要があるのか 、それともより効率的なストリームベースのアプローチがあるのか 疑問に思います。私の場合、ストリーミング形式でレコードを受け取ります。同様の csv 出力プロセスでは、メモリに保持する必要がある行数が完全なデータセットのサイズに達することがないように、行を 1000 のバッチでディスクに書き込みます。
するべきか...?:
- pandas データフレームを作成し、寄木細工に書き込むだけです。(つまり、データセット全体をメモリに保存する必要がありますが、これは必要な要件として扱います。)
- ストリーミングに適した方法を使用して、受信時に一度に 1000 行程度を書き込み、プロセス全体での特定時点の RAM 消費の合計を最小限に抑えます。(これを行う方法に関するドキュメントは見当たりませんでした。また、それが寄木細工のオプションであるかどうかもわかりません。)
- すべてを CSV に書き込み、CSV コンテンツをスマートに読み取り/分析し、事後に圧縮された寄木細工を作成する関数を使用します。(実行時間はおそらく遅くなりますが、メモリ プロファイルが低くなり、非常に大きなファイルで失敗する可能性が低くなります。)
考え?提案?