私は100,000以上の行で構成されたデータフレームを持ち、各行は100,000列、合計で10,000,000,000までの浮動小数点値を持ちます。巨大なdaskデータフレームを一見に保存できますか?
私はcsv
(タブ区切り)ファイルで以前にそれらを読んで、私は成功した250ギガバイトのRAMと50コアのXeonマシンにそれらを読み、など.parq
ディレクトリとしてそれを書いてみることができた:
huge.csv
の浮動小数点数は文字列として保存され、125GBです。それは週に近く、ディレクトリのhuge.parq
に書いてきた
import dask.dataframe as dd
filename = 'huge.csv'
df = dd.read_csv(filename, delimiter='\t', sample=500000000)
df.to_parquet('huge.parq')
は14ギガバイトで、.to_parquet
を保存するプロセスは、いつでもすぐに停止するつもりはないように思えます。
そしてfree -mh
が可能な左メモリはまだだが、.parq
ディレクトリを保存するために取っている時間は途方もなく遅いことを示している:
$ free -mh
total used free shared buff/cache available
Mem: 251G 98G 52G 10M 101G 152G
Swap: 238G 0B 238G
質問は以下のとおりです。の大きさを考えると
データフレームとマシンは、daskデータフレームを寄木張りファイルに保存することは可能でしょうか?
巨大なデータフレームを保存するのに、
dask
とfastparquet
の時間がかかるのは正常ですか?寄木細工のファイルを保存するのにかかる時間を見積もる方法はありますか?
10e9浮動小数点値は私にとって巨大に見えません。 1e5の列はそうです。 dask.arrayとHDF5の使用を検討しましたか?これらは、両方のディメンションでのブロッキングに適している可能性があります。 – MRocklin
dsk.arrayとHDF5が>>>いいえのデータフレームに適している理由はありますか?列の? 「ブロッキング」とは何ですか? – alvas
パーティションあたりの行数はいくつですか? read_csvはバイト数を分割しているので、小さい数字が必要です。各パーティションの各列には、存在しなければならないメタデータが別に存在し、これまでに見たメタデータよりもメタデータが大きくなっていますが、動作することが期待されます。配列のような100kx100k浮動小数点数を格納するために、私は実際に[zarr](http://zarr.readthedocs.io/en/latest/)を推奨します。 – mdurant