如果文件中的键分布是 99% 的单词以 'A' 开头,1% 的单词以 'B' 到 'Z' 开头,并且您必须计算每个字母开头的单词数,您将如何计算有效地分发您的 key ?
最佳答案
解决方案 1: 我认为要走的路是组合器,而不是分区器。组合器将聚合以字母“A”开头的单词的本地总和,然后将部分总和(而不是始终为数字 1)发送给缩减器。
解决方案 2: 但是,如果您坚持为此使用自定义分区器,您可以简单地在一个单独的 reducer 中处理以字母“A”开头的单词,而不是所有其他单词,即,专用一个reducer 仅适用于以字母“A”开头的单词。
解决方案 3: 此外,如果您不介意“作弊”一点,您可以为以字母“A”开头的单词定义一个计数器,并在映射阶段递增它。然后,忽略这些词(不需要通过网络发送它们)并为其他词使用默认的分区器。作业完成后,检索计数器的值。
解决方案 4: 如果您不介意“作弊”,定义 26 个计数器,每个字母一个,并根据当前词。您可以不使用 reducer (将 reducer 的数量设置为 0)。这将保存所有排序和洗牌。作业完成后,检索所有计数器的值。
关于java - 在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214332/