在大型文本文件中查找重复记录

2024-05-02

我在一台 Linux 机器(Redhat)上,并且有一个 11GB 的文本文件。文本文件中的每一行包含单个记录的数据,并且该行的前 n 个字符包含该记录的唯一标识符。该文件包含略多于 2700 万条记录。

我需要验证文件中不存在具有相同唯一标识符的多个记录。我还需要在 80GB 文本文件上执行此过程,因此任何需要将整个文件加载到内存中的解决方案都是不切实际的。


逐行读取文件,这样您就不必将其全部加载到内存中。

为每一行(记录)创建一个 sha256 哈希值(32 字节),除非您的标识符较短。

将哈希值/标识符存储在numpy.array。这可能是存储它们的最紧凑的方式。 2700 万条记录乘以 32 字节/散列为 864 MB。这应该适合现在像样的机器的内存。

为了加快访问速度,您可以使用第一个,例如2 个字节的哈希值作为 a 的键collections.defaultdict并将其余的哈希值放入值的列表中。这实际上会创建一个包含 65536 个存储桶的哈希表。对于 27e6 条记录,每个存储桶平均包含大约 400 个条目的列表。 这意味着比 numpy 数组搜索速度更快,但会使用更多内存。

d = collections.defaultdict(list)
with open('bigdata.txt', 'r') as datafile:
    for line in datafile:
        id = hashlib.sha256(line).digest()
        # Or id = line[:n]
        k = id[0:2]
        v = id[2:]
        if v in d[k]:
            print "double found:", id
        else:
            d[k].append(v)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在大型文本文件中查找重复记录 的相关文章