MapReduce长度为3的有向图路径

时间:2018-07-12 08:57:18

标签: hadoop graph mapreduce

我正在尝试解决一个练习,但仍然没有找到解决方法。

设计一个MapReduce算法,给定一个表示为弧列表的有向图,该MapReduce算法列出所有节点对(x,y),以便存在三个弧(x,a),(a,b)和(b,y)。约简器接收的值列表的长度绝不能长于图中的节点数。请提供伪代码。

很久以来,我通过以下方式找到了长度为2的路径:

map (k, v): 
   write (k, (v, "out"))
   write (v, (k, "in"))

reduce(k ,list(v)):
   // write all pairs of nodes such that one has an arc exiting and the other has an arc entering

但是从现在开始,我不明白如何找到长度为3的路径,并满足列表长度的属性。

1 个答案:

答案 0 :(得分:1)

我不是hadoop语法专家,但可以从理论上解决这个问题。

考虑G =(V,E)-ARCS是我们的E包含元素,例如(x,a),(a,b),(b,y)

您找到了一种提取距离为2的所有节点的方法。将此集合称为2-LEN。在您的简短示例中,它将包含(x,b)和(a,y)。

让我们创建一个新的集合,定义如下(伪代码):

NEW_SET = new set
for each ((x,y) in ARCS)
     NEW_SET.add(x,y,1)
for each ((x,y) in 2-LEN)
     NEW_SET.add(x,y,2)

您可能已经了解,第​​三个参数是距离。 现在,对于您的示例,NEW_SET将包含:(x,a,1),(a,b,1),(b,y,1),(x,b,2),(a,y,2)。

现在在您的2距离算法中使用相同的逻辑-将NEW_SET映射为:

map(k,v,d):
   write (k, (v, "out", d))
   write (v, (k, "in" , d))

reduce(k , list (v)):
   //write all pairs of nodes such that one has an 'in' and the other has an 'out' AND have different d

对于地图后的示例,我们将具有以下内容:

  • (x,(a,out,1))
  • (a,(x,in,1))
  • (a,(b,out,1))
  • (b,(a,in,1))
  • (b,(y,out,1))
  • (y,(b,in,1))
  • (x,(b,out,2))
  • (b,(x,in,2))
  • (a,(y,out,2))
  • (y,(a,in,2))

因此,现在您将2个距离节点与1个距离节点相连,结果所有对之间的距离均为3。

请注意,您将需要在该集合上执行uniq,因为您将获得两次(x,y)-一次是从((x,a),(a,y))获得的,一次是从((x,b)获得的, (b,y))

正如我所提到的,我不是hadoop语法方面的专家,但我相信应该有一种实现它的方法。