3

我有一个巨大的文件(仅包含 ascii 字符),我需要找到最常出现的字符。

我的方法:

  1. 拆分文件并将其分发到多个处理节点。
  2. 每个节点将对字符进行计数并生成字符计数数组[256]。
  3. 父节点将接收所有节点的所有计数数组并计算出现频率最高的字符。

但我想知道节点是否需要传输整个计数数组来计算最常见的字符?有没有办法减少节点之间传输的处理数据量。

注意:我是分布式编程的新手,因此尝试熟悉基本技术。

4

2 回答 2

4

如果您让每个节点处理例如 1 MiB,那么 1 KiB 的响应(对于 256 乘以 4 个字节int)可以忽略不计。

顺便说一句,看看,尤其是。map-reduce的“ hello world ”是字数统计——几乎正是您所寻找的。

于 2013-02-07T19:54:24.660 回答
1

如果您想知道最常见字符的确切数量,那么是的,每个节点都需要返回所有计数,一个节点可能会计算 100 万个“a”,而另一个节点只计算 1 个实例。要获得确切的总数,您需要所有计数。

另外(不相关),第 1 点说您将“拆分和分发文件”。这是否意味着在一台机器上读取它并通过网络发送它?在这种情况下,您已经将文件的一部分读入内存,因此不妨立即扫描它,而它在缓存中仍然是温暖的。当然,如果您已经预先分发了文件,这无关紧要。

于 2013-02-08T06:02:23.303 回答