将`dask.array`保存为hdf5数据集

时间:2018-05-08 13:32:36

标签: python numpy dask

我有一个dask.array跨越多个hdf5文件。基本上,我想做的是切片数据集并将生成的切片存储到hdf5。我到目前为止所尝试的基本上是这样的:

In [1]: import dask.array as da

In [3]: import numpy as np

In [5]: xs = da.from_array(np.linspace(0, 10), chunks=10) # could be from hdf5 files

In [7]: import h5py

In [8]: h5f = h5py.File('/tmp/paul/foo.h5')

In [9]: h5f.create_dataset(name='ham', data=xs)
Out[9]: <HDF5 dataset "ham": shape (50,), type "<f8">

这很有效。但是,当我da.concatenate多个h5py数据集时,create_dataset函数似乎冻结(线程死锁?)。请注意,xs可以是(ballpark)10 GB的数据集,跨越10个文件,每个1 GB。

在不诉诸xs并冒h5py的情况下,将da.compute写入MemoryError数据集的合理方法是什么?

1 个答案:

答案 0 :(得分:1)

我怀疑h5py库正在将你的dask数组转换为内存中的numpy数组,这可能不是你想要的。

相反,您可能需要商店功能(请参阅this section in the documentation

da.to_hdf5('myfile.hdf5', '/x', x)

您可能还需要to_hdf5方法(请参阅this section in the documentation

to_hdf5

您应该注意适当地将HDF5数据集分块,以使其与您的dask.array分块对齐。如果您不想自己考虑,Variable.get('xxxx_apiKey')方法将为您处理此问题。