我必须比较包含在Windows中的两个大小为2-3 GB的csv文件。
我尝试将第一个放在HashMap中,以便将其与第二个比较,但结果(如预期的)是非常高的内存占用。
目标是获取另一个文件中的差异。
这些线可能会以不同的顺序出现,也可能会漏掉。
有什么建议吗?
发布于 2012-05-17 19:52:07
假设您希望通过编程在Java中这样做,答案是不同的。
这两个文件都订好了吗?如果是这样,则不需要读取整个文件,只需从两个文件的开头开始,并且
如果您没有订购文件,那么您也许可以在diff之前订购这些文件。同样,由于您需要一个低内存解决方案,所以不要读取整个文件来排序它。将文件分割成可管理的块,然后对每个块进行排序。然后使用插入排序来组合块。
发布于 2012-05-17 19:47:50
unix命令diff可以进行精确匹配。
您还可以使用-b标志运行它,以忽略空格的差异。
发布于 2015-05-20 10:37:31
使用单级解析器,因为它提供了速度最快的Java解析器。您可以处理高达100 GB的文件,没有任何问题,而且速度非常快。
为了比较大型CSV文件,我建议您使用自己的RowProcessor实现,并将其包装到ConcurrentRowProcessor中。
披露:我是这个图书馆的作者。它是开源和免费的(ApacheV2.0许可证)。
https://stackoverflow.com/questions/10642298
复制相似问题