2

我正在做一个大数据挖掘的研究项目。我目前已经编写了代码来将我拥有的数据组织到字典中。但是,数据量如此之大,以至于在形成字典时,我的计算机内存不足。我需要定期将我的字典写入主内存并以这种方式创建多个字典。然后我需要比较生成的多个字典,相应地更新键和值,并将整个内容存储在磁盘上的一个大字典中。知道如何在 python 中做到这一点吗?我需要一个可以快速将字典写入磁盘然后比较 2 个字典并更新密钥的 api。我实际上可以编写代码来比较 2 个字典,这不是问题,但我需要这样做而不会耗尽内存。

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

4

4 回答 4

2

同意 Hoffman:选择关系数据库。数据处理对于关系引擎来说是一项不寻常的任务,但相信它是在易于使用/部署和大型数据集的速度之间的一个很好的折衷。

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

于 2012-07-10T03:29:51.533 回答
0

您应该使用 PostgreSQL 等数据库。

于 2012-07-10T03:14:20.477 回答
0

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

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

于 2012-07-10T03:34:40.110 回答
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)

您当然可以找出其余部分并根据需要扩展功能。

于 2012-07-10T03:35:16.303 回答