当前位置: 首页 > 知识库问答 >
问题:

将文件1中每一行的数据与文件2中的数据进行比较

蒯嘉赐
2023-03-14

我有两个大约150 MB的大txt文件。我想从file1的每一行读取一些数据,并扫描file2的所有行,直到找到匹配的数据。如果没有找到匹配的数据,我希望将该行输出到另一个文件中。

选项2:使用上面提到的三个读取器对文件1中的每个记录读取文件2 n次。每次读取后,我必须关闭文件并再次读取。我在想最好的办法是什么。我还有别的选择吗

共有1个答案

霍浩皛
2023-03-14

我得对文件做些假设。我将假设行是长的,并且你希望在2个文件中的行是不一样的。

我会读4次文件(每个文件2次)。当然,它没有读取2次(每个文件1次)那么高效,但读取2次意味着使用了大量内存。

每个文件第一次读取的伪代码:

Map<MyComparableByteArray, Long> digestMap = new HashMap<>();
try (BufferedReader br = ...)
{
    long lineNr = 0;
    String line;
    while ((line = br.readLine()) != null)
    {
        digestMap.put(CreateDigest(line), lineNr);
    }
}
    null

顺便说一句,MyComparableByteArray是一个byte[]的自定义包装器,以使它成为一个HashMap键(即通过实现equals()和hashCode()方法)。字节[]不能用作键,因为它不能与equals()和hashCode()一起使用。有两种处理方法:

  1. 我已经提到过的自定义包装器--这将比替代方案更有效。
  2. 使用base64将其转换为字符串。这将使内存使用比选项1差2.5倍,但不需要自定义代码。
 类似资料:
  • 问题内容: 我正在尝试使用多重处理来并行化应用程序,该处理程序会处理一个非常大的csv文件(64MB至500MB),逐行执行一些工作,然后输出一个固定大小的小文件。 目前,我正在执行,不幸的是,它已完全加载到内存中(我认为),然后我将该列表分成了n个部分,n是我要运行的进程数。然后,我在分类列表上执行。 与单线程,仅打开文件并迭代的方法相比,这似乎具有非常非常糟糕的运行时。有人可以提出更好的解决方

  • 我在一个目录中有许多文件,每个文件包含跨多行的文本。目前,我使用以下代码将所有这些文件读取到spark数据集( 但是,这会创建一个数据集,其中每一行都是一行,而不是一个文件。我希望数据集中每行都有一个文件(作为字符串)。 如何在不迭代每个文件并将其作为RDD单独读取的情况下实现这一点?

  • 问题内容: 我编写了一个PHP脚本,该脚本贯穿文本文件(实际上是imdb的“列表”文件)并将其存储在本地MySQL数据库中。 由于这些列表文件最大为200MB,因此需要花费大量时间。默认情况下,PHP 设置为30秒。 我将此值设置为300只是为了尝试是否可行。例如,我的“ movies.list”文件约为80MB,并使用此脚本运行了300秒,在数据库中创建了约25000行。这行不通,因为我什至没有

  • 问题内容: 如何检查数据库中是否存在Blob的重复项。我的数据库中有文档表,但是我不确定如何检查其中一个是否重复。我知道您应该使用dbms_lob.compare函数,但是在阅读了有关该主题的一些线程和文章之后,我仍然不明白这一点。 Documents表具有document_id列和data(blob)列。如何检查document_id = 1是否重复? 问题答案: “如果dbms_lob.com

  • 我正在使用Excel2007。当某些列数据从文件-1与文件-2匹配时,我试图将单价从Excel文件-2数据复制到Excel文件-1。 我的VBA代码:

  • 问题内容: 我使用巨大的数据文件,有时我只需要知道这些文件中的行数,通常我会打开它们并逐行读取它们,直到到达文件末尾 我想知道是否有更聪明的方法可以做到这一点 问题答案: 这是我到目前为止找到的最快的版本,比readLines快6倍。在150MB的日志文件上,这需要0.35秒,而使用readLines()则需要2.40秒。只是为了好玩,Linux的wc -l命令需要0.15秒。 编辑,在9 1/2