🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
* 构建用户社交网络关系。 * 顶点:用户名、年龄。 * 边:表示打call(电话)次数。 ![](https://img.kancloud.cn/fc/92/fc92b71f52c778519fbd1cbb3b2b0fbc_1009x396.png) 问题: 1、找出大于30岁的用户。 2、假设打call超过5次,表示真爱。请找出他(她)们。 ```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 ContactGraphx { def main(args: Array[String]): Unit = { val spark:SparkSession = SparkSession.builder() .master("local[4]") .appName(this.getClass.getName) .getOrCreate() val sc:SparkContext = spark.sparkContext import spark.implicits._ // 1. 构建点集合 val users:RDD[(Long, (String, Int))] = sc.parallelize(Array( (1L, ("Alice", 28)), (2L, ("Bob", 27)), (3L, ("Charlie", 65)), (4L, ("David", 42)), (5L, ("Ed", 55)), (6L, ("Fran", 50)) )) // 2. 构建边集合 val cntCall:RDD[Edge[Int]] = sc.parallelize(Array( Edge(2L, 1L, 7), Edge(2L, 4L, 2), Edge(3L, 2L, 4), Edge(3L, 6L, 3), Edge(4L, 1L, 1), Edge(5L, 2L, 2), Edge(5L, 3L, 8), Edge(5L, 6L, 3) )) // 3. 构图 val graph:Graph[(String, Int), Int] = Graph(users, cntCall) // 找出大于30岁的用户 graph.vertices.filter({case (id, (name, age)) => age > 30}).foreach(x=>println(x.toString())) // 或者 // graph.vertices.filter(_._2._2>30) // (3,(Charlie,65)) // (4,(David,42)) // (5,(Ed,55)) // (6,(Fran,50)) // 假设打call超过5次,表示真爱。请找出他(她)们 graph.triplets.filter(_.attr>5).foreach(x=>println(s"${x.toString()}")) // ((5,(Ed,55)),(3,(Charlie,65)),8) // ((2,(Bob,27)),(1,(Alice,28)),7) } } ```