[英]Dask to hdf5 write fails, "h5py cannot be pickled"
下面是它产生错误的部分:
procDask = da.stack(procArrays)
print(procDask)
print(procDask.compute())
#da.to_hdf5('out.hdf5',{'/arr',procDask})
f = h5py.File('out.hdf5',mode='w')
d = f.require_dataset('/a', shape=procDask.shape, dtype=procDask.dtype)
da.store(procDask, d)
我的 procDask 显示为
dask.array<stack, shape=(3, 3, 3), dtype=int16, chunksize=(1, 3, 3), chunktype=numpy.ndarray>
但是,使用上述任何一种编写方法(注释和未注释的方法)都会出现以下错误:
TypeError: h5py objects cannot be pickled
它有点冗长,显示源代码等,但我想这是主要错误。 我使用的方法错了吗?
编辑:这是一个可以重现错误的代码
def main():
procArray = da.ones((3,3,3))
procArray.to_hdf5('testout.hdf5','/arr')
client.shutdown()
if __name__ == "__main__":
client = Client()
main()
正确,H5Py 对象不能被 pickle,因此不能在分布式设置中使用。 我建议使用to_hdf5
方法来避免这种情况。 它处理使事情正常运行所需的技巧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.