我有一个二部图,我想投影到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
暂无答案!
目前还没有任何答案,快来回答吧!