将Dask分区写入单个文件

rey*_*rey 19 python dask

新的dask,1GB当我在dask数据帧中读取它时,我有一个CSV文件,它在我写入文件的更改后创建了大约50个分区,它创建了与分区一样多的文件.
有没有办法将所有分区写入单个CSV文件,是否有办法访问分区?
谢谢.

MRo*_*lin 21

简短的回答

不,Dask.dataframe.to_csv只将CSV文件写入不同的文件,每个分区一个文件.但是,有办法解决这个问题.

连接之后

也许只是在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?
Run Code Online (Sandbox Code Playgroud)

或者使用Dask.delayed

但是,您可以使用dask.delayed自己执行此操作,方法是将dask.delayed与数据帧一起使用

这会为您提供一个您可以使用的延迟值列表:

list_of_delayed_values = df.to_delayed()
Run Code Online (Sandbox Code Playgroud)

然后由您构建计算以将这些分区顺序写入单个文件.这并不难,但可以在调度程序上引起一些备份.

  • 如果在dask.dataframe上调用`.compute()`,则会得到一个熊猫数据框。如果使用dask.delayed,那么一切都会变得很懒惰。 (2认同)

小智 5

您可以使用该compute函数将 dask 数据帧转换为 Pandas 数据帧,然后使用to_csv. 像这样:

df_dask.compute().to_csv('csv_path_file.csv')

  • 但在这种情况下,您可以只使用 pandas,因为 df 必须适合内存。 (6认同)