Python Dask到hdf5的写入失败,“;h5py不能腌制;
以下是产生错误的部分:Python Dask到hdf5的写入失败,“;h5py不能腌制;,python,parallel-processing,dask,hdf5,h5py,Python,Parallel Processing,Dask,Hdf5,H5py,以下是产生错误的部分: 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) d
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)
我的程序显示是一个
dask.array<stack, shape=(3, 3, 3), dtype=int16, chunksize=(1, 3, 3), chunktype=numpy.ndarray>
它有点冗长,显示源代码等,但我想这是主要错误。
我使用的方法错了吗
编辑:
下面是一个可以重现错误的代码
def main():
procArray=da.one((3,3,3))
procArray.to_hdf5('testout.hdf5','/arr'))
client.shutdown()
如果名称=“\uuuuu main\uuuuuuuu”:
client=client()
main()
正确,H5Py对象不能被pickle,因此不能在分布式设置中使用。我建议使用to_hdf5
方法来避开此问题。它处理使事情顺利进行所需的技巧。没有人会对数据堆栈进行酸洗。。。。没人知道是谁或是什么告诉你你能做到这一点?@hpaulj这是我试图遵循的文件,它显示了两种方法,但我认为我用错了,我不确定充分的追溯在哪里可能有用。很难说是dask
还是h5py
在抱怨。关于procDask
,特别是它的数据类型,可能有些太“复杂”了。在da.store
示例中,x
是一个数值numpy数组。@hpaulj在对store函数使用numpy数组时,我得到错误“ValueError:所有源必须是dask数组对象”,谢谢您的回答!我添加了一个在我的机器上复制错误的代码,但是使用了to_hdf5方法。你能看一下吗?它发生在我初始化一个客户端时,但这样做不是和串行代码一样吗?Hrm,很有趣。我去提出一个问题,发现:
TypeError: h5py objects cannot be pickled