Dask是一个记录良好的可扩展库,用于并行处理,使用基于图形的工作流在编写许多具有与之相关的固有并行性的应用程序时非常有用。然而,当并行写入hdf5文件时,特别是在使用多处理调度程序时,这是相当困难的。如果使用默认的多线程调度程序,以下代码可以正常工作
x = da.arange(25000, chunks = (1000,))
da.to_hdf5('hdfstore.h5', '/store', x)
但是如果你全局设置多处理调度程序:
dask.set_options(get=dask.multiprocessing.get)
再次运行代码,
TypeError: can't pickle _thread.lock objects
多线程调度程序没问题,但是从单个大型csv文件读取并将其转换为hdf5文件时速度太慢。使用多处理调度程序,它的速度快,能够在最大负载下使用所有CPU,但hdf写入失败并带有上述错误(hdf5文件支持使用h5py mpi驱动程序同时写入访问,我认为)。如果你直接做
x.compute()
一切都很好但是它将整个数据加载到内存中,这对大型数组和文件来说并不是很好。有人遇到过这种情况吗?请分享宝贵的建议..
conda虚拟环境上的Dask版本'0.13.0'