我想实现一个词长程序,通过使用本地聚合方法对大型语料库上的4个类别的单词进行分类,但我对这些方法的工作原理没有深入的了解。因为我是MapReduce领域的新手。例如,组合器和映射内组合器之间最明显的区别是什么?此外,我应该在我的代码中添加组合器和映射内组合器,并且应该衡量它们之间的差异。但是我不知道我应该从哪里开始,如果有人帮助我,我会很感激。
发布于 2015-02-03 03:36:01
实现映射内组合器(正如最好描述的here)是在map()方法范围内编写代码的过程,该方法存储多个键-值对,并在输出之前执行某种聚合函数。这与典型的map()方法不同,后者往往一次只处理一个键值对。这是非常危险的,因为开发人员需要非常小心地分配内存。
映射内组合器通常用于排序列表-即,ArrayList用于将X得分最高的条目存储到映射器,并在所有键-值对都进入映射器后输出。显然,耗尽内存的风险很小(除非X或键或值非常大),因此可以立即丢弃大量数据。
或者,常规组合器基本上是在map阶段完成后立即在同一节点上执行的缩减程序。这样做的好处是,开发人员不必担心实现自己的分组(不像映射中的组合器),因此不太可能出现内存问题。主要的缺点是你不能保证组合器会运行。
常规的组合器通常用于计数-带有组合器的WordCount (例如this就是典型的例子。
对于你的情况,我总是会去找一个普通的组合器。让它完成对类别进行分组的所有工作,并避免担心内存问题。
https://stackoverflow.com/questions/28262000
复制相似问题