从块中的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 ,这听起来像是要读取的行数。哪个是对的?