Weighted PageRank
runUntilConvergence API
- API
def runUntilConvergence[VD: ClassTag](graph: Graph[VD, Double], tol: Double, resetProb: Double = 0.15): Graph[Double, Double]
- 功能描述
本算法模型基于Spark框架,根据指定的收敛精度,通过幂乘法方式计算图中各结点PageRank值,直至两轮迭代收敛误差小于所设阈值。本算法兼容两种初始化方式,若初始化策略为1时(默认策略),结点PR值初始1/N,PageRank值取值范围[0, 1];若初始化策略为0时,结点PR值初始1,PageRank值取值范围[0, N],N为结点个数。本算法支持有向有权。
- API描述
- 包名:package org.apache.spark.graphx.lib
- 类名:WeightedPageRank
- 方法名:runUntilConvergence
- 输入:graph: Graph[VD, Double],带边权重的GraphX图数据
- 核心参数:
- tol:收敛时允许的容差(通常取值1e-7)
- resetProb:重置概率系数,缺省值(0.15)。
- 参数详情:
参数名称
取值类型
描述
graph
Graph[VD, Double],VD为泛型类型,分别表示输入图的结点属性类型,计算过程不会感知。Double为边权值,取值范围:大于0。
GraphX图数据
tol
Double如1e-7等,取值范围:大于0。
收敛时允许的容差
resetProb
Double,经验值0.15,取值范围:[0,1]。
重置系数
- 输出:Graph:Graph[Double, Double],结点属性存储该结点的PageRank值,边属性存储归一化后的边权值(转移概率)。
- 使用样例
val conf = new SparkConf().setAppName(“WPR”).setMaster(host) val sc = new SparkContext(conf) val edges = Array(Edge(0, 1, 0.8), Edge(0, 3, 0.2), Edge(1, 2, 0.6), Edge(1, 4, 0.4), Edge(2, 3, 1.0)) val graph = Graph.fromEdges(sc.parallelize(edges, 3), 1.0D) val tol = 1e-7 val resetProb = 0.15 WeightedPageRank.runUntilConvergence(graph, tol, resetProb)
- 样例结果
第一列为结点ID,第二列为PR值。
0,0.12346810618504848 1,0.20742641296812722 2,0.22925557943241917 3,0.27985559905505475 4,0.15999430235935014
run API
- API
def run[VD: ClassTag](graph: Graph[VD, Double], numIter: Int, resetProb: Double = 0.15): Graph[Double, Double]
- 功能描述
本算法模型基于Spark框架,通过幂乘法方式计算图中各结点PageRank值,直至固定的迭代轮数。本算法兼容两种初始化方式,若初始化策略为1时(默认策略),结点PR值初始1/N,PageRank值取值范围[0, 1];若初始化策略为0时,结点PR值初始1,PageRank值取值范围[0, N],N为结点个数。本算法支持有向有权。
- API描述
- 包名:package org.apache.spark.graphx.lib
- 类名:WeightedPageRank
- 方法名:run
- 输入:graph: Graph[VD, Double],带边权重的GraphX图数据
- 核心参数:
- numIter:迭代次数
- resetProb:重置概率系数,缺省值(0.15)。
- 参数详情:
参数名称
取值类型
描述
graph
Graph[VD, Double],VD为泛型类型,分别表示输入图的结点属性类型,计算过程不感知。Double为边权值,取值范围:大于0。
GraphX图数据
numIter
Int,取值范围:大于0。
迭代次数
resetProb
Double,经验值0.15,取值范围:[0,1]。
重置系数
- 输出:Graph:Graph[Double, Double],结点属性存储该结点的PageRank值,边属性存储归一化后的边权值(转移概率)。
- 使用样例
val conf = new SparkConf().setAppName(“WPR”).setMaster(host) val sc = new SparkContext(conf) val edges = Array(Edge(0, 1, 0.8), Edge(0, 3, 0.2), Edge(1, 2, 0.6), Edge(1, 4, 0.4), Edge(2, 3, 1.0)) val graph = Graph.fromEdges(sc.parallelize(edges, 3), 1.0D) val iter = 10 val resetProb = 0.15 val resultG = WeightedPageRank.run(graph, iter, resetProb).vertices.collectAsMap() println(resultG)
- 样例结果
第一列为结点ID,第二列为PR值。
0,0.12347829782187406 1,0.2074150506862632 2,0.22926032815143343 3,0.2798376250731247 4,0.16000869826730468
setInitStrategy API
- API
def setInitStrategy(strategy: Int): WeightedPageRank
- 功能描述
该接口用于设置WeightedPageRank算法结点初始值初始化策略,算法模型提供两种常用策略。
- 结点初始值为1,则算法运行结果PR值总和为N。
- (默认策略)结点初始值为1/N,则算法运行结果PR值总和为1,N为结点数。
- API描述
- 包名:package org.apache.spark.graphx.lib
- 类名:WeightedPageRank
- 方法名:setInitStrategy
- 输入:strategy: Int,结点初始化策略,0代表策略1,1代表策略2
- 参数详情:
参数名称
取值类型
参数含义
strategy
可取0,1;0代表策略1,1代表策略2,当取其他值时,采用策略2。
Int
- 输出:WeightedPageRank对象,用于调用run/runUntilConvergence接口进行有权PageRank计算
- 使用样例
val edges = Array(Edge(0, 1, 0.8), Edge(0, 3, 0.2), Edge(1, 2, 0.6), Edge(1, 4, 0.4), Edge(2, 3, 1.0)) val graph = Graph.fromEdges(sc.parallelize(edges, 3), 1.0D) val resultBase = Map(2 -> 1.146301640757167, 4 -> 0.8000434913365232, 1 -> 1.0370752534313155, 3 -> 1.399188125365623, 0 -> 0.61739148910937) val iter = 10 val resetProb = 0.15 val resultG = WeightedPageRank.setInitStrategy(WPRParams.INIT_USE_ONE).run(graph, iter, resetProb).vertices.collectAsMap()
- 样例结果
第一列为结点ID,第二列为PR值。
0,0.61739148910937 1,1.0370752534313155 2,1.146301640757167 3,1.399188125365623 4,0.8000434913365232