在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题

Which logic should be followed using custom partitioner in map reduce to solve this

如果在文件中的键分布是 99% 的单词以 'A' 开头,1% 以 'B' 到 'Z' 开头,您必须计算单词的数量从每个字母开始,你将如何有效地分配你的密钥?

解决方案 1: 我认为要走的路是组合器,而不是分区器。组合器将聚合以字母 'A' 开头的单词的局部总和,然后将部分总和(而不是始终为数字 1)发送给缩减器。

解决方案 2: 但是,如果您坚持为此使用自定义分区程序,您可以简单地在单独的缩减器中处理以字母 'A' 开头的单词,而不是所有的缩减器换句话说,即只为以字母 'A'.

开头的单词指定一个 reducer

解决方案 3: 此外,如果您不介意 "cheating" 一点,您可以为以字母 'A' 开头的单词定义一个计数器并在地图阶段增加它。然后,忽略这些词(不需要通过网络发送它们)并为其他词使用默认的分区器。作业完成后,检索计数器的值。

解决方案 4: 如果您不介意 "cheating" 更进一步,定义 26 个计数器,每个字母一个,并在映射阶段递增它们,根据当前单词的第一个字母。您可以不使用减速器(将减速器的数量设置为 0)。这将保存所有排序和洗牌。作业完成后,检索所有计数器的值。