Python帮助延迟加载大型数据集

时间:2015-05-19 19:59:17

标签: python database bigdata generator

我有一个将数据加载到数据库中的脚本。我从csv文件中获取数据并返回一个生成器。从生成器生成的值用于构建插入语句,以便一次批量加载最多100K条记录。目前我有一个看起来像这样的函数来构建一个"列表列表":

def split_statements(data_set, num_of_splits):
    for i in data_set:
        yield list(islice(data_set, num_of_splits))

这适用于1行到数百万行数据,将后者分成100K块。但是我一直在尝试切换到某种类型的生成器/延迟加载函数来处理极大文件的边缘情况。我尝试了以下方法:

response.sendRedirect("welcome.jsp");

当文件中只有一行时,这看起来很笨拙并且不起作用。然而,它在10GB文件上运行良好。

非常感谢任何见解/帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

我怀疑它在10GB文件上真的有效。我不知道您的data_set,但我认为for i in data_set将始终从data_set读取下一个元素,并将其作为i提供,然后您将其忽略。这可以解释为什么1行文件不起作用。 10GB文件可能也不起作用,并且缺少所有被浪费为i的行。

演示:

from itertools import islice
it = iter('abcabcabc')
for i in it:
    print(list(islice(it, 2)))

输出:

['b', 'c']
['b', 'c']
['b', 'c']