Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MapReduce查找图中距离为2的节点对_Java_Hadoop_Graph_Mapreduce - Fatal编程技术网

Java 使用MapReduce查找图中距离为2的节点对

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 ... 我假设“两跳”

如何为有向图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
...
我假设“两跳”意味着两个节点之间需要有一个中间节点。例如,“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