使用MapReduce

时间:2017-06-28 21:14:56

标签: java hadoop graph mapreduce

如何为有向图G =(V,E)编写Mapper类和Reducer类。需要计算所有节点对(x,y),使得y可以在两跳中从x到达,即,存在节点z,使得(x,z)和(z,y)都在E中。这里( x,y)可能在也可能不在E中。

输入应为边缘,节点ID由制表符分隔,例如:

1 2
0 1
3 2
2 3
4 1
...

输出应该是一个节点对的列表x y由长度恰好为2的路径连接,每行一个,例如:

1 3
4 2
...

1 个答案:

答案 0 :(得分:0)

我认为“两跳”意味着两个节点之间需要有中间节点。例如,“z”是(x,y)对的中间节点。

您可以做的是将Node ID作为Mapper和Reducer中的Key。

这样,您将收集“z”所涉及的所有边缘到一个将传递到Reducer中的集合。

在reducer中添加代码,尝试查找通过z连接的所有(x,y)对。

从你的例子中,reducer将获得所有边缘:

key: 1 - Edges (reducer values): (1, 2), (0, 1) => produces no pair
key: 2 - Edges (reducer values): (1, 2), (3, 2), (2, 3) => produces (1, 3) as 2 in the middle
key: 3 - Edges (reducer values): (3, 2), (2, 3), (1, 3) => produces no pair