在python中集成多个字典(大数据)

时间:2012-07-10 03:11:24

标签: python memory data-mining

我正在开展大数据挖掘研究项目。我当前编写了代码来组织我的数据到字典中。但是,数据量太大,以至于在形成字典时,我的计算机内存不足。我需要定期将我的字典写入主内存并以这种方式创建多个字典。然后,我需要比较生成的多个词典,相应地更新键和值,并将整个内容存储在磁盘上的一个大词典中。知道我怎么能在python中做到这一点?我需要一个能快速将dict写入磁盘然后比较2个dicts和更新密钥的api。我实际上可以编写代码来比较2个dicts,这不是问题,但我需要在不耗尽内存的情况下完成它。

我的字典看起来像这样: “橙色”:[“它是一种水果”,“非常好吃”,......]

4 个答案:

答案 0 :(得分:2)

同意霍夫曼:寻找关系数据库。对于关系引擎而言,数据处理是一项不寻常的任务,但相信它是易用性/部署与大型数据集速度之间的良好折衷。

我习惯使用sqlite3,它只是Python,但我经常通过apsw使用它。像sqlite3这样的关系引擎的优势在于,您可以指示它通过连接和更新对您的数据进行大量处理,并且它将以非常合理的方式处理所需的所有数据的内存/磁盘交换。您还可以使用内存数据库来保存需要与大数据交互的小数据,并通过“ATTACH”语句链接它们。我用这种方式处理了千兆字节。

答案 1 :(得分:0)

您应该使用PostgreSQL等数据库。

答案 2 :(得分:0)

首先想到 - 切换到64位python并增加计算机的虚拟内存设置; - )

第二个想法 - 一旦你有一个大字典,你可以对密钥进行排序并将其写入文件。写完所有数据后,您可以同时遍历所有文件,比较并写出最终数据。

答案 3 :(得分:0)

当你说“主内存”时你的意思是硬盘吗?计算机中只有一个内存系统。

您可以使用pickle模块将Python数据对象编写到文件中。我不确定你是否可以在一个文件中腌制多个对象,但这应该是无关紧要的。

import pickle

def dump_dict(dict, name):
    with open(name, 'wb') as file:
        return pickle.dump(file, dict)

def get_dict(name):
    with open(name, 'rb') as file:
        return pickle.load(file)

def get_key(key, *list_of_dicts):
    """The first argument is the key; any further args are interpreted as the names of
pickled dict files to check."""
    out = []
    for name in *list_of_dicts:
        with open(name, 'rb') as f:
            out.append(pickle.load(f).get(key)) # Add this dict's value, glossing over KeyErrors.
    return tuple(out)

您可以确定其余部分并根据需要扩展功能。