我需要比较两个csv文件,每个文件大小在2-3 GB左右,在Windows平台下。我试过将第一个文件放进HashMap中,然后与第二个文件进行比较,但结果(预料之中)是非常高的内存消耗。
我的目标是获得另一个文件中的差异。
这些行可能以不同的顺序出现,有可能还会缺失。
有什么建议吗?
我需要比较两个csv文件,每个文件大小在2-3 GB左右,在Windows平台下。我试过将第一个文件放进HashMap中,然后与第二个文件进行比较,但结果(预料之中)是非常高的内存消耗。
我的目标是获得另一个文件中的差异。
这些行可能以不同的顺序出现,有可能还会缺失。
有什么建议吗?
Unix命令diff可以用于查找精确匹配。
您也可以使用-b
标志运行它,以忽略仅限于空格的差异。
这里有一个类似的Stack Overflow帖子,我在其中提供了一种解决方案的概述,该解决方案仅需要将两个文件中较小的一个存储在内存中:
这是一般解决方案,不需要对文件进行排序,因为您在问题中声明行的顺序可能不同。
无论如何,即使可以避免。我不想在这里重复解决方案,但是思路是索引一个文件,然后遍历另一个文件。您可以通过仅保持哈希表和索引中每行的位置来避免在内存中存储整个较小的文件。以这种方式,您将不得不多次在磁盘上访问文件,但是您不必将其保存在内存中。
算法的运行时间为O(N + M)。内存消耗为O(min(N,M))。