从hdf5文件

时间:2016-12-14 17:32:08

标签: python hdf5 chunks hdfstore

从块中的hdf5文件中进行选择时,我想知道结果选择中有多少块。

输入数据nrows中的行数最多可达100ml,chunksize为100k,但对于大多数选择,块nrows_chunk中的行数较小,因此对于不同where我可以选择一个或多个块。在使用块进行操作之前以及在调用iteratorGenerator()时,我想知道将会有多少块。直觉上,我想在我的语法中使用类似len(list(enumerate(iteratorGenerator())))的东西,但是这会给出length = 1(我想因为iteratorGenerator()一次只考虑一个块)。

我怀疑这个问题没有解决办法,因为使用生成器的整个想法不是一次执行所有选择,而是按块进行分块。但实际上,当我在下面运行for循环时,第一次迭代需要很长时间,但是后续迭代只需要几秒钟,这表明在第一次迭代时,大多数有关块的数据都会被收集。这对我来说很困惑,我很感激有关如何通过块进行选择的任何解释。

iteratorGenerator = lambda: inputStore.select(
                groupInInputStore,
                where=where,
                columns=columns,
                iterator=True,
                chunksize=args.chunksize
            )

nrows = inputStore.get_storer(groupInInputStore).nrows

# if there is more than one chunk in the selection:
for i, chunk in enumerate(iteratorGenerator()):
    # check the size of a chunk 
    nrows_chunk = len(chunk)
    # do stuff with chunks, mainly groupby operations

# if there is only one chunk do other stuff 

此外,我不确定chunksize中的HDFStore.select是指什么。根据我的经验,在应用where条件后,它是所选块的最大大小。另一方面,http://pandas.pydata.org/pandas-docs/stable/generated/pandas.HDFStore.select.html定义 chunksize:在迭代中包含的nrows ,这听起来像是要读取的行数。哪个是对的?

0 个答案:

没有答案