【发布时间】:2015-06-12 12:55:40
【问题描述】:
我正在编写一个 MapReduce 程序,要求我找到一个节点 (000-999) 的入站和出站链接数,本质上是一个 Web 图处理器。我需要返回一个特定的节点作为键,每个文档的出度和入度作为值。例如,
示例文本文件:
000 002
001 002
002 000
001 000
应该返回:
000 1 2
001 2 0
002 1 2
按照我的逻辑,我似乎需要创建两个 map reduce 作业,第一个传入 LongWritable 键,其值作为节点对(例如 000 002),计算来自每个节点的出站链接数并在减速器阶段结束时返回 (000 1) 之类的东西。然后我会通过翻转节点对(例如,000 002 变为 002 000)并找到那些出站链接的计数来找到文档的入度(在上面的示例中,这将返回 (000 2))。然后我需要组合这些值以生成 (000 1 2) 的最终输出。是创建两个地图作业并以某种方式将这两个值加入到两个值列表中的最佳方法吗?如果我使用 java(不是 Hive)来编码,有没有办法加入这些值?有没有更简单有效的方法来解决这个问题?
编辑:对于这个程序,映射器功能是相同的,因为我只是切换两个值(000 002 到 002 000)以便以完全相同的方式计算入站路径和出站路径。 reducer 函数也完全相同,但它需要在两个单独的作业上运行,所以我没有收到我的最终值作为入度和出度的总和。我需要返回入度,然后返回出度并将它们附加到值列表中。
【问题讨论】:
标签: java hadoop dictionary mapreduce reduce