我的数据存储在由pytables
创建的HDF5文件中。我需要使用read_where()
来阅读这些文件,因为我需要应用一些过滤条件。
我在h5py
文档中看到这个整洁的dask
example:
dsets = [h5py.File(fn)['/data'] for fn in sorted(glob('myfiles.*.hdf5')]
arrays = [da.from_array(dset, chunks=(1000, 1000)) for dset in dsets]
通常情况下,我可以使用pytables
代替h5py
执行此类操作:
dsets = [tables.File(fn).root.data for fn in sorted(glob('myfiles.*.hdf5')]
但是,我无法在pytables
中找到一种方法,将类似于表格的结果返回到dask
并应用了我的过滤器,可以懒惰地阅读。 read_where()
将整个数组读入内存,因此我不能这样做,因为我的数据大于内存:
dsets = [tables.File(fn).root.data.read_where('color == "blue"') for fn in sorted(glob('myfiles.*.hdf5')]
pytables
有没有办法解决这个问题?另外,有没有办法将我的读取函数包装在这样的生成器中,并使用dask来创建数组?
def array_generator():
for fn in sorted(glob('myfiles.*.hdf5'):
yield tables.File(fn).root.data.read_where('color == "blue"')