🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
连通分量是一个子图,其中任何两个顶点通过一条边或一系列边相互连接,其顶点是原始图顶点集的子集,其边是原始图边集的子集。 ![](https://img.kancloud.cn/8b/e4/8be4eb416fd02582a296fdd1c383d295_912x470.png) ```scala import org.apache.spark.SparkContext import org.apache.spark.graphx.{Edge, Graph} import org.apache.spark.rdd.RDD import org.apache.spark.sql.SparkSession object ConnectComponts { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder() .appName(this.getClass.getName) .master("local[4]") .getOrCreate() val sc: SparkContext = spark.sparkContext // 构建用户的点集合 val users: RDD[(Long, Int)] = sc.parallelize(Array( (1L, 1), (2L, 2), (3L, 3), (4L, 4), (5L, 5), (6L, 6) )) // 构建用户的边集合,顶点6L被孤立,没有关于它的边 val cntCall: RDD[Edge[Int]] = sc.parallelize(Array( Edge(1L, 2L, 1), Edge(2L, 3L, 1), Edge(3L, 4L, 1), Edge(4L, 5L, 1), Edge(5L, 1L, 1) )) // 通过顶点和边构建图形 val graph = Graph(users, cntCall) // 通过调用API获取连通分量 graph.connectedComponents().triplets.foreach(println) // 没有顶点6L // ((3,1),(4,1),1) // ((4,1),(5,1),1) // ((2,1),(3,1),1) // ((1,1),(2,1),1) // ((5,1),(1,1),1) } } ```