我如何懒惰地将带有where子句的Pytables HDF5读入Dask?

时间:2018-02-22 10:00:19

标签: dask pytables

我的数据存储在由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"')

0 个答案:

没有答案