5

OK、pandas を使って、4,000 万行以上、150 列以上の 30GB の csv ファイルを HDFStore にロードする実験を行っています。列の大部分は文字列で、その後に数値と日付が続きます。

これまで numpy、pandas、または pytables を実際に使用したことはありませんが、R でデータ フレームをいじったことがあります。

現在、約 20000 行のサンプル ファイルを HDFStore に保存しています。HDFStore からテーブルを読み取ろうとすると、テーブルがメモリに読み込まれ、メモリ使用量が最大 100MB 増加します

f=HDFStore('myfile.h5')
g=f['df']

次に、DataFrame を含む変数を削除します。

del g

メモリ使用量が約5MB減少した時点で

を使用して g にデータを再度ロードするg=f['df']と、メモリ使用量がさらに 100MB 増加します。

クリーンアップは、実際にウィンドウを閉じたときにのみ発生します。

データを編成する方法として、メモリに収まる最大テーブル サイズが約 1 GB の個々のテーブルにデータを分割し、一度に 1 つずつ使用するつもりです。ただし、メモリをクリアできない場合、このアプローチは機能しません。

どうすればこれを達成できるかについてのアイデアはありますか?

4

1 に答える 1

2

OPの質問の2番目のポイント(「メモリを解放する方法」)に答えるには

簡潔な答え

ストアを閉じて選択したデータフレームを削除しても機能しませんがgc.collect()、データフレームを削除した後、メモリをクリアする呼び出しが見つかりました。

以下の例では、メモリは期待どおりに自動的に消去されます。

data=numpy.random.rand(10000,1000)         # memory up by 78MB
df=pandas.DataFrame(data)                  # memory up by 1 MB

store = pandas.HDFStore('test.h5')         # memory up by 3 MB
store.append('df', df)                     # memory up by 9 MB (why?!?!)

del data                                   # no change in memory
del df                                     # memory down by 78 MB

store.close()                              # no change in memory
gc.collect()                               # no change in memory (1) 

(1) 店は閉店してもまだ記憶にある

ここで、上から続けて、以下のように再開するとしstoreます。メモリーは、 gc.collect() が呼び出された後にのみ消去されます。

store = pandas.HDFStore('test.h5')         # no change in memory (2) 
df = store.select('df')                    # memory up by 158MB ?! (3)
del df                                     # no change in memory
store.close()                              # no change in memory
gc.collect()                               # memory down by 158 MB (4)

(2) その店は一度も立ち去らなかった (3) 私はテーブルの選択がテーブルの 6 倍もの時間を占める可能性があることを読んだ (4) その店はまだそこにある

.copy()最後に、オープン時に dfを実行しようとしました( df = store.select('df'))。これを行わないでください。メモリ内に、後でガベージ コレクションできないモンスターが作成されます。

最後の質問 メモリ内の DF が 100MB の場合、読み込み中にメモリ内の 2 ~ 3 倍のサイズを占有する可能性があることは理解していますが、HDFStore から選択してストアを閉じた後、メモリ内で 200MB のままになるのはなぜですか?

于 2015-04-23T09:36:03.710 に答える