Java 使用MapReduce查找图中距离为2的节点对
如何为有向图G=(V,E)编写映射器类和还原器类。需要计算所有的节点对(x,y),使得y可以在两个跳中从x到达,即,存在一个节点z,使得(x,z)和(z,y)都在e中。这里(x,y)可能在e中,也可能不在e中 输入应该是一条边,其节点ID由选项卡分隔,例如:Java 使用MapReduce查找图中距离为2的节点对,java,hadoop,graph,mapreduce,Java,Hadoop,Graph,Mapreduce,如何为有向图G=(V,E)编写映射器类和还原器类。需要计算所有的节点对(x,y),使得y可以在两个跳中从x到达,即,存在一个节点z,使得(x,z)和(z,y)都在e中。这里(x,y)可能在e中,也可能不在e中 输入应该是一条边,其节点ID由选项卡分隔,例如: 1 2 0 1 3 2 2 3 4 1 ... 1 3 4 2 ... 输出应该是由长度正好为2的路径连接的节点对x y的列表,每行一个,例如: 1 2 0 1 3 2 2 3 4 1 ... 1 3 4 2 ... 我假设“两跳”
1 2
0 1
3 2
2 3
4 1
...
1 3
4 2
...
输出应该是由长度正好为2的路径连接的节点对x y的列表,每行一个,例如:
1 2
0 1
3 2
2 3
4 1
...
1 3
4 2
...
我假设“两跳”意味着两个节点之间需要有一个中间节点。例如,“z”是(x,y)对的中间节点
您可以做的是将节点ID作为映射器和减速器中的键
这样,您将收集“z”涉及的所有边,并将其收集到一个集合中,该集合将被传递到减速器中
在reducer中,您添加了代码,该代码将尝试查找通过z连接的所有(x,y)对
从您的示例中,减速器将获得以下对象的所有边:
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
我假设“两跳”意味着两个节点之间需要有一个中间节点。例如,“z”是(x,y)对的中间节点
您可以做的是将节点ID作为映射器和减速器中的键
这样,您将收集“z”涉及的所有边,并将其收集到一个集合中,该集合将被传递到减速器中
在reducer中,您添加了代码,该代码将尝试查找通过z连接的所有(x,y)对
从您的示例中,减速器将获得以下对象的所有边:
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