通过 访问 HDF5 时pandas
,我有时会遇到记录在案的错误,即无法做出超过 31 个选择条件。为了避免这种情况,我决定拆分选择条件,创建一批迭代器,然后在最后连接结果。
这是我的方法:
generators = []
for idChunk in grouper(conditionList, args.chunksizeGrouper, None):
# creates chunks of length args.chunksizeGrouper, will add [None] to fill up shorter lists
where = 'myId in [{}]'.format(
', '.join([str(id) for id in idChunk if id is not None]))
iteratorGenerator = lambda: hdfStore.select(
'table',
where=where,
iterator=True,
chunksize=args.chunksize
)
generators.append(iteratorGenerator)
#finally
doSomethingWithGeneraetors(generators, df, args)
也就是说,我想创建一个生成器列表。调用generator()
会返回select语句,对应where条件。
然后我将所有这些存储在一个列表中。
为了完整起见,这里是`grouper():
def grouper(iterable, n, fillvalue=None):
'''
takes an iterable and returns chunks.
'''
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
出现的问题之一是我对where
重写 lambda 函数的定义:当我在第二轮时,新定义的where
(基于 second idCunk
)将替换lambda
里面的生成器generators[0]
。
我该如何规避这个问题?对于这种结构,我还有什么需要注意的,还是有更好的方法来处理这个问题?