如何在图中找到每个顶点的度-RDD转换?

时间:2020-06-25 12:37:57

标签: scala apache-spark hadoop rdd

val rdd1 = sc.parallelize(Seq((1,2),(1,3),(1,4),(2,3),(2,4),(3,4)))

边缘(Rdd1)通过创建。

我想找到图中每个顶点的度数。

我想向RDD1添加相反的顺序。 (2,1) (3,1) (4,1 ) (3,2) (4,2) (4,3)将被添加,以便 我可以通过每个键的值数找到顺序。

如何在rdd1的元素之间添加(y,x) to (x,y)

2 个答案:

答案 0 :(得分:1)

rdd1.map(s=>((s._2,s._1),s))

((2,1),(1,2))
((4,2),(2,4))
((3,2),(2,3))
((3,1),(1,3))
((4,3),(3,4))
((4,1),(1,4))

答案 1 :(得分:1)

如果要使用Spark和图表,可以看看GraphX

要找到图中顶点的度数,可以使用

val edges = spark.sparkContext.parallelize(Seq((2,1),(3,1),(4,1 ),(3,2),(4,2) ,(4,3)))
      .map(t => (t._1.toLong,t._2.toLong)) //the ids of the vertices have to be Long
    
val graph = Graph.fromEdgeTuples(edges, 0) //create a (possibly distributed) graph

val degrees = new GraphOps(graph).degrees //calculate the degrees of all vertices
degrees.foreach(println)

打印

//(vertex-id, degree)
(4,3)
(2,3)
(3,3)
(1,3)