我有一个相当大的文本文件,平均30GB。我想从此文件中删除重复的行。什么是一个很好的有效算法来做到这一点。对于小文件,我通常使用字典,例如Python字典来存储唯一键。但这次文件相当大。任何语言建议都没问题。 (我正在考虑使用C?还是它不依赖于语言,但算法更重要?)。感谢
答案 0 :(得分:2)
如果你不能只在亚马逊上启动一个具有足够内存的实例来保存RAM中的所有内容,那么这就是我要使用的策略:
步骤1 - 遍历并为每一行生成校验和/哈希值。我可能会使用SIPHASH。将这些输出到文件。
第2步 - 对siphash值的文件进行排序,并丢弃任何只有一个条目的文件。将结果输出为一组哈希值&比赛次数。
第3步 - 阅读文件。重新生成每行的哈希值。如果它是一条匹配的行,请在内存中保留它。如果另一个已经在内存中具有相同的哈希值,则比较以查看这些行本身是否匹配。输出“匹配”,如果为真。如果您已经看到所有N行具有相同的哈希值并且它们不匹配,请继续处理该记录。
此策略取决于重复次数仅占总行数的一小部分。如果情况并非如此,那么我会使用其他策略,比如分而治之。