dask
を初めて使用しました。1GB
CSVファイルをdask
データフレームで読み取ると、ファイルに変更を加えた後、約50のパーティションが作成され、パーティションと同じ数のファイルが作成されます。
すべてのパーティションを単一のCSVファイルに書き込む方法はありますか?パーティションにアクセスする方法はありますか?
ありがとうございました。
いいえ、Dask.dataframe.to_csvは、CSVファイルを異なるファイルに書き込むだけです(パーティションごとに1つのファイル)。ただし、これには回避策があります。
おそらく、dask.dataframeがファイルを書き込んだ後にファイルを連結するだけでしょうか?これは、パフォーマンスの点で最適に近いと思われます。
_df.to_csv('/path/to/myfiles.*.csv')
from glob import glob
filenames = glob('/path/to/myfiles.*.csv')
with open('outfile.csv', 'w') as out:
for fn in filenames:
with open(fn) as f:
out.write(f.read()) # maybe add endline here as well?
_
ただし、これは dask.delayed を使用して自分で行うことができます dask.delayedをデータフレームと一緒に使用
これにより、使用できる遅延値のリストが表示されます。
_list_of_delayed_values = df.to_delayed()
_
その後、これらのパーティションを単一のファイルに順次書き込むように計算を構造化するのはあなた次第です。これは難しいことではありませんが、スケジューラで少しのバックアップを引き起こす可能性があります。
編集1:(2019年10月23日)
Dask 2.6.xでは、_single_file
_というパラメーターがあります。デフォルトではFalse
です。 True
を設定すると、df.compute()
を使用せずに単一のファイル出力を取得できます。
例えば:
_df.to_csv('/path/to/myfiles.csv', single_file = True)
_
リファレンス: to_csvのドキュメント
compute
関数を使用して、daskデータフレームをpandasデータフレームに変換してから、to_csv
。このようなもの:
df_dask.compute()。to_csv( 'csv_path_file.csv')