如何计算graphx中每个边的两个顶点的度数之和

时间:2017-07-21 13:18:33

标签: scala apache-spark spark-graphx degrees

我有一个这样的图表:

val vertexArray = Array(
      (1L, ("Alice", 28)),
      (2L, ("Bob", 27)),
      (3L, ("Charlie", 65)),
      (4L, ("David", 42)),
      (5L, ("Ed", 55)))                               
val edges = sc.parallelize(Array(
                 Edge(1L, 2L, ""), 
                 Edge(1L, 3L, ""), 
                 Edge(2L, 4L, ""),
                 Edge(3L, 5L, ""),
                 Edge(2L, 3L, "")))
val graph = Graph(vertexArray, edges)

我想得到每条边上两个顶点的度数之和。 例如,节点1L有2个邻居,节点2L有3个邻居,那么我想得到的结果是“1L,2L,5”。整个结果是:

"1L, 2L, 5"
"1L, 3L, 5"
"2L, 4L, 4"
"3L, 5L, 4",
"2L, 3L, 6"

如何在GraphX中实现它?

1 个答案:

答案 0 :(得分:1)

首先,您可以将每个顶点属性替换为其总度

val graphDegrees = graph.outerJoinVertices(graph.degrees)((_,_,deg) => deg.get)

最后,映射每个三元组并总结两个顶点的度

val graphSum = graphDegrees.mapTriplets(t => t.srcAttr + t.dstAttr)

我们可以通过打印边缘检查结果

graphSum.edges.collect.foreach(println)

哪个给出了

Edge(1,2,5)
Edge(1,3,5)
Edge(2,4,4)
Edge(2,3,6)
Edge(3,5,4)