多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 用于评估网页链接的质量和数量,以确定该网页的重要性和权威性的相对分数,范围为0到10。 * 从本质上讲,PageRank是找出图中顶点(网页链接)的重要性。 * 简单地说,PageRank就是用在网页排名上,相对分数越大,排名越靠前。 * GraphX提供了PageRank API用于计算图的PageRank。 ```scala // Graph有一个隐式函数implicit def graphToGraphOps[VD, ED]会自动关联到GraphOps // 所以可以直接graph.pageRank方式调用 class GraphOps[VD, ED] { def pageRank(tol : scala.Double, // 收敛时允许的误差,越小越精确, 迭代次数也越多 resetProb : scala.Double // 随机重置概率 ) : Graph[scala.Double, scala.Double] = {} } ``` PageRank应用示例: ![](https://img.kancloud.cn/fc/92/fc92b71f52c778519fbd1cbb3b2b0fbc_1009x396.png) (1)找出用户社交网络中最重要的用户 ```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 PageRank { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder() .appName(this.getClass.getName) .master("local[4]") .getOrCreate() val sc: SparkContext = spark.sparkContext import spark.implicits._ // 构建用户的点集合 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)) )) // 构建用户的边集合 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) )) // 通过顶点和边构建图形 val graph = Graph(users, cntCall) // 可以直接通过API调用PageRank算法, // 只需要传入一个参数: ①精度, 这个值越小, 精度越高, 迭代次数越多 val ranks: Graph[Double, Double] = graph.pageRank(0.000001) ranks.vertices.repartition(1).sortBy(_._2, false).foreach(println) // (顶点ID, 顶点所得分数) // (1,1.7924127957615184) // (6,0.9969646507526427) // (2,0.9969646507526427) // (4,0.9688717814927127) // (3,0.6996243163176441) // (5,0.5451618049228395) } } ```