Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用大型文件(>;10GB)_Java - Fatal编程技术网

Java 使用大型文件(>;10GB)

Java 使用大型文件(>;10GB),java,Java,我在谷歌上搜索,没有找到答案。 所以我有一个巨大的文件(>10GB),我无法存储在内存中。这些词用“|”分隔。我需要找到10万个最常用的短语 所以我将使用InputStream逐行读取这个文件,所以我只需要1行的内存。然后我打算把这句话分解成短语 但是我如何存储这些短语呢?我想使用此文件(格式:@Phrase@@Count@)。 文件结构可以如下所示: 短语|计数 “短语1”17 “短语2”5 “措辞3”6 每次我得到短语时,我都会在文件中找到它,如果没有这样的短语,我会将它放在文件的末尾,并将

我在谷歌上搜索,没有找到答案。 所以我有一个巨大的文件(>10GB),我无法存储在内存中。这些词用“|”分隔。我需要找到10万个最常用的短语

所以我将使用InputStream逐行读取这个文件,所以我只需要1行的内存。然后我打算把这句话分解成短语

但是我如何存储这些短语呢?我想使用此文件(格式:@Phrase@@Count@)。 文件结构可以如下所示:

短语|计数
“短语1”17
“短语2”5
“措辞3”6

每次我得到短语时,我都会在文件中找到它,如果没有这样的短语,我会将它放在文件的末尾,并将count设置为1。否则我会增加这个短语的计数


有可能吗?我的意思是写到文件中的某个位置?如果是这样,我该怎么做?也许有一些自由泳?或任何其他建议?

不要边写边写文件,而是应该保留一个包含键值对的数据结构,其中键是短语,值是它出现的次数。然后,一旦您完整地阅读了输入文件,并且所有内容都被计算并正确地存储在您的数据结构中,然后并且只有在那时,您才应该使用自己施加的约束将数据结构的内容输出到文本文件中

因为您的目标是找到相等的值,所以对所有短语进行排序是可行的,但是由于您没有足够的内存一次存储所有数据,因此基于磁盘的合并排序可能是您的最佳选择

在维基百科上,它被称为:

外部排序的一个例子是外部合并排序算法,它对每个适合RAM的块进行排序,然后将排序后的块合并在一起。例如,仅使用100 MB的RAM对900 MB的数据进行排序


使用数据库。只要有足够的内存存储所有单个短语,即如果有足够的重复短语,这将起作用。我实际上不是一个迟钝者)我没有足够的内存来读取整个文件:(但是我怎么计算呢?我仍然需要内存来存储所有单词。一旦它们被排序,你只需迭代并计算连续相等的短语,将结果输出到一个新文件中。结果:一个按短语排序的文件,带有计数,与你想要的完全一样。即使结果文件大于内存中的大小,也可以工作,因为你正在流式处理排序的data。