有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词
大家都清楚的知道1G的文件不可能用1M的内存空间处理。所以我们要按照1M的上限来计算,假设每个单词都为16个字节,那么1M的内存可以处理多少个单词呢? 1M = 1024 KB = 1024 * 1024 B 。然后1M / 16B = 2^16个单词,那么1G大概有多少个单词呢? 有2^26个单词,但是实际中远远不止这些,因为我们是按照最大单词长度算的。我们需要把这1G的单词分批处理,根据上面的计算,可以分成大于2^10个文件。索性就分成2000个文件吧,怎么分呢,不能随便分,不能简单的按照单词的顺序然后模2000划分,因为这样有可能相同的单词被划分到不同的文件中去了。这样在统计个数的时候被当成的不同的单词,因为我们没有能力把在不同文件中相同单词出现的次数跨越文件的相加,这就迫使我们要把不同序号的同一个单词划分到同一个文件中:应用hash统计吧。然后呢,我们对每个文件进行分别处理。按照key-value一次遍历文件进行处理。

本文介绍了一种在有限内存条件下处理大规模文件的技术方案,重点在于如何通过合理的分批与哈希映射策略来统计1G文件中频数最高的100个词。
5893

被折叠的 条评论
为什么被折叠?



