Dask.dataframe не будет записывать ни в один файл CSV. Как вы упомянули, он будет записывать в несколько файлов CSV, по одному файлу на раздел. Ваше решение вызова .compute().to_csv(...)
будет работать, но вызов .compute()
преобразует полный кадр данных dask.data в кадр данных Pandas, который может заполнить память.
Один из вариантов - просто избегать Pandas и Dask вместе и просто читать байты из нескольких файлов и выгружать их в другой файл.
with open(out_filename, 'w') as outfile:
for in_filename in filenames:
with open(in_filename, 'r') as infile:
# if your csv files have headers then you might want to burn a line here with `next(infile)
for line in infile:
outfile.write(line + '\n')
Если вам не нужно ничего делать, кроме слияния ваших CSV-файлов в более крупный, я бы просто сделал это и вообще не трогал pandas / dask. Они попытаются прочитать данные CSV в данные в памяти, что займет некоторое время и вам не понадобится. Если, с другой стороны, вам нужно выполнить некоторую обработку с помощью pandas / dask, я бы использовал dask.dataframe для чтения и обработки данных, записи во многие файлы csv, а затем использовал описанный выше трюк для их последующего слияния.
Вы также можете рассмотреть возможность записи в хранилище данных, отличное от CSV. Такие форматы, как HDF5 и Parquet, могут быть намного быстрее. http://dask.pydata.org/en/latest/dataframe-create.html
person
MRocklin
schedule
23.03.2017