据我所知,
我有一个非常大的
当我运行这段代码来处理相对较小的文件时,一切正常。但是,当我尝试将其应用于70亿行的数据库时,在计算迭代器时会出现
我希望能够创建一个生成器,实时生成块,它不会将太多数据存储在RAM中,例如:
但是,
我可以将
HDFStore.select
是选择大数据集的主要工具。但是,在尝试使用 chunksize
和 iterator=True
遍历块时,一旦底层数据集足够大,迭代器本身就会成为一个非常大的对象,我不明白为什么迭代器对象会变得如此大,并且它包含了哪些信息以至于必须变得如此大。我有一个非常大的
HDFStore
结构(70亿行,420 GB 磁盘空间),我想按块进行迭代:iterator = HDFStore.select('df', iterator=True, chunksize=chunksize)
for i, chunk in enumerate(iterator):
# some code to apply to each chunk
当我运行这段代码来处理相对较小的文件时,一切正常。但是,当我尝试将其应用于70亿行的数据库时,在计算迭代器时会出现
内存错误
。我有32GB的RAM。我希望能够创建一个生成器,实时生成块,它不会将太多数据存储在RAM中,例如:
iteratorGenerator = lambda: HDFStore.select('df', iterator=True, chunksize=chunksize)
for i, chunk in enumerate(iteratorGenerator):
# some code to apply to each chunk
但是,
iteratorGenerator
不可迭代,因此这也不起作用。我可以将
HDFStore.select
循环遍历到 start
和 stop
行,但我认为应该有一种更优雅的迭代方式。