Trillion PageRank
run API
- API
def run(edge: RDD[(Long, (Double, Array[Long]))], part: Int, numIter: Int, resetProb: Double, isOnlySrc: Boolean = false): RDD[(Long, Double)]
- 功能描述
本算法模型基于Spark框架,基于指定迭代次数计算图中各节点PageRank值,PageRank值取值范围[0, N],N为节点个数。本算法支持有向无权。
- API描述
- 包名:package org.apache.spark.graphx.lib
- 类名:TrillionPageRank
- 方法名:run
- 输入:graph: RDD[(Long, (Double, Array[Long]))],图数据。表示为{源节点,(源点初始值,目标点集合)}
- 核心参数:
- partNum: 分区数。
- numIter: 迭代次数。
- resetProb:重置概率系数,缺省值(0.15)。
- 参数详情:
参数名称
取值类型
参数含义
graph
(Long, (Double, Array[Long])),表示(源节点,(源点初始值,目的节点集合))。
GraphX图数据
partNum
Int,取值范围:大于0。
分区数
numIter
Int,取值范围:大于0。
迭代次数
resetProb
Double,经验值0.15,取值范围:[0,1]。
重置系数
isOnlySrc
Boolean,缺省值为false,即计算全局的节点的pagerank。
是否只计算源点的PageRank
- 输出:PageRank值,RDD[(Long, Double)],增量结点的PageRank值。
- 使用样例
val conf = new SparkConf().setAppName(“TrillionPageRank”).setMaster(host) val sc = new SparkContext(conf) val edges = Array(Edge(1,2,1.0), Edge(1,3,1.0), Edge(1,6,1.0), Edge(2,8,1.0), Edge(3,1,1.0), Edge(3,2,1.0), Edge(3,4,1.0), Edge(3,6,1.0), Edge(3,7,1.0), Edge(3,8,1.0), Edge(4,7,1.0), Edge(4,8,1.0), Edge(5,2,1.0), Edge(5,4,1.0), Edge(5,6,1.0), Edge(5,7,1.0), Edge(5,8,1.0), Edge(6,2,1.0), Edge(6,4,1.0), Edge(6,5,1.0), Edge(6,7,1.0), Edge(6,8,1.0), Edge(7,4,1.0), Edge(7,8,1.0), Edge(7,9,1.0), Edge(7,11,1.0), Edge(8,2,1.0), Edge(8,4,1.0), Edge(8,7,1.0), Edge(8,11,1.0), Edge(9,4,1.0), Edge(9,7,1.0), Edge(9,8,1.0), Edge(9,11,1.0), Edge(10,1,1.0), Edge(10,3,1.0), Edge(10,4,1.0), Edge(10,5,1.0), Edge(11,6,1.0), Edge(11,8,1.0), Edge(11,9,1.0)) val graph = sc.parallelize(edges, 3).map(f => (f.srcId, Array(f.dstId))).reduceByKey(_ ++ _).mapValues((1.0, _)) val iterNum = 100 val resetProb = 0.15 val part = 100 val resultG = TrillionPageRank.run(graph, part, iterNum, resetProb)
- 样例结果
节点ID
PR值
10
0.15000000000000002
1
0.21632361452756482
3
0.24316669078281006
5
0.2960495884141481
6
0.6716152259655768
9
0.9086302548739689
2
1.0095338325502028
11
1.325458202205165
4
1.5562848351772833
7
1.8027471258784566
8
2.8201906296248227
父主题: 中心性分析