一、Spark graphx中 connectedComponents算子用法:返回一个图中所有最大连通子图的顶点集合,其中每个元素是一个(key,value)形式的二元组,key是每个最大连通子图中的顶点,value是该最大连通子图中数值最小的顶点。
二、代码演示:
object GraphDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[*]").setAppName("graphDemo")
val sc: SparkContext = new SparkContext(conf)
//2.构造点集合
val vartexRDD: RDD[(Long, (String, Int))] = sc.makeRDD(Seq(
(1L, ("mm", 1)),
(2L, ("tom", 1)),
(6L, ("jery", 1)),
(9L, ("其玉", 1)),
(5L, ("安安", 1)),
(7L, ("来了", 1)),
(16L, ("咯咯", 1)),
(21L, ("卡卡", 1)),
(44L, ("a说道", 1)),
(138L, ("阿达", 1)),
(133L, ("激光仪", 1)),
(158L, ("富华", 1))
))
//3.构造边集合
val edgeRDD: RDD[Edge[Int]] = sc.makeRDD(Seq(
Edge(1L, 133L, 0),
Edge(2L, 133L, 0),
Edge(6L, 133L, 0),
Edge(9L, 133L, 0),
Edge(6L, 138L, 0),
Edge(16L, 138L, 0),
Edge(21L, 138L, 0),
Edge(44L, 138L, 0),
Edge(5L, 158L, 0),
Edge(7L, 158L, 0)
))
//4.构造图
val graph: Graph[(String, Int), Int] = Graph(vartexRDD,edgeRDD)
/**
* 返回一个图中所有最大连通子图的顶点集合,其中每个元素是一个(key, value)形式的二元组
* key : 该最大通子图中的每个顶点
* value : 该最大连通子图中数值最小的那个顶点
* 例如下面示例的输出结果为(6,1) (2,1) (16,1) (158,5) (7,5) 等内容
* 因为该图中共有两个最大连通子图,其中一个最大连通子图中的最小顶点是1,另一个的最小顶点是5
*/
val vertices: VertexRDD[VertexId] = graph.connectedComponents().vertices
println(vertices.collect().sortBy(_._2).toBuffer);
}
}