Python 确定从hdf5文件中选择的块数
当以块的形式从Python 确定从hdf5文件中选择的块数,python,hdf5,chunks,hdfstore,Python,Hdf5,Chunks,Hdfstore,当以块的形式从hdf5文件中选择时,我想知道结果选择中有多少块 输入数据nrows中的行数最多可达100mln,chunksize为100k,但对于大多数选择,块nrows\u chunk中的行数较小,因此对于不同的位置,我可以选择一个或多个块。在对块进行操作之前,以及调用iteratorGenerator()时,我想知道将有多少块。直观地说,在我的语法中,我需要类似于len(list(enumerate(iteratorGenerator()))的东西,但这会给出length=1(我想是因为i
hdf5
文件中选择时,我想知道结果选择中有多少块
输入数据nrows
中的行数最多可达100mln,chunksize
为100k,但对于大多数选择,块nrows\u chunk
中的行数较小,因此对于不同的位置,我可以选择一个或多个块。在对块进行操作之前,以及调用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
此外,我不确定HDFStore.select
中的chunksize
指的是什么。根据我的经验,它是应用where
条件后所选块的最大大小。另一方面,定义了chunksize:nrows以包含在迭代中,对我来说,这听起来像是要读取的行数。哪个是正确的