spark graphx平方邻接矩阵的示例代码

bprjcwpo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(253)

我有一个二部图,我想投影到2个新的图上(例如,使用演员和电影的互联网电影数据库中的网络,投影出演员网络和电影网络,其权重对应于共同的电影(演员)数量)
在正则矩阵表示法中,只需求邻接矩阵的平方,而忽略对角线(等于原始图的outdegree)。大概对于大型稀疏图有更快的基于边的算法,这就是为什么我对在hadoop和map-reduce框架中使用spark/graphx感兴趣的原因。
那么,如何在spark graphx中计算a^2呢?
假设我从以下代码开始:

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

我看到的所有函数都是顶点上的连接、边上的连接或顶点属性或边属性的贴图。如何对所有边进行双重循环,并使用基于顶点ID的边创建一个新的图?
下面是一些伪代码:

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题