Spark GraphX的示例代码用于平方邻接矩阵

时间:2014-05-15 19:27:33

标签: hadoop mapreduce graph-theory apache-spark

我有一个二分图,我想投影到2个新图表(例如,使用演员和电影的互联网电影数据库中的网络,投影演员网络和电影网络,其权重对应于电影的数量(共同演员)

在常规矩阵表示法中,只需要对邻接矩阵求平方并忽略对角线(它等于原始图形的outdegree)。据推测,对于大型稀疏图,有更快的基于边缘的算法,这就是我开始对使用Spark / GraphX和Hadoop以及Map Reduce框架感兴趣的原因。

那么,我如何在Spark GraphX中进行A ^ 2计算?

假设我从这段代码开始:

import org.apache.spark.graphx._ 
val orig_graph = GraphLoader.edgeListFile(sc, "bipartite_network.dat") 

我看到的所有函数都是顶点上的连接,边上的连接或顶点属性或边属性的映射。如何双重遍历所有边缘并使用基于顶点id的EDGES创建新图形?

这是一些伪代码:

for i = 1 to orig_graph.edges.count 
   for j = i to orig_graph.edges.count 
      var edge1 = orig_graph.edges.[i] 
      var edge2 = orig_graph.edges.[j] 
      if edge1.1 == edge2.1 then add new edge = (edge1.2, edge2.2) 
      if edge1.1 == edge2.2 then add new edge = (edge1.2, edge2.1) 
      if edge1.2 == edge2.1 then add new edge = (edge1.1, edge2.2) 
      if edge1.2 == edge2.2 then add new edge = (edge1.1, edge2.1) 
这样的事情。

我是否需要使用Pregel和消息传递,或者只使用各种graph.join函数?

另见http://apache-spark-developers-list.1001551.n3.nabble.com/GraphX-adjacency-matrix-example-td6579.html

0 个答案:

没有答案