1. PageRankアルゴリズムの説明:
1.1各頂点を1 / Nのページランキング値で初期化します。Nはグラフ内の頂点の総数です。
1.2ループ:
各頂点は、出力エッジに沿って1 / MのPR値を送信します。ここで、Mは現在の頂点の出力次数です。
各頂点が隣接する頂点から他の送信されたPR値を受信すると、これらのPR値の合計が現在の頂点の新しいPR値として使用されます。
グラフの頂点のPRは、前の反復と比較して大幅に変化せず、反復は終了します。
2. PageRankアルゴリズムの場合:
package sparkGraphX
import org.apache.spark.graphx.{Graph, GraphLoader, VertexRDD}
import org.apache.spark.{SparkConf, SparkContext}
object pageRankTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("SimpleGraphX").setMaster("local")
val sc = new SparkContext(conf)
sc.setLogLevel("WARN")
val graph: Graph[Int, Int] = GraphLoader.edgeListFile(sc,"D:/web.txt")
// val web: VertexRDD[Double] = graph.pageRank(0.001).vertices //动态调用 参数为收敛值
val staticPage: VertexRDD[Double] = graph.staticPageRank(5).vertices //静态调用 参数为迭代次数,第二个参数为resetProb: Double = 0.15为方法写死的值,不需要写即可。
staticPage.collect.foreach(println(_)) //输出计算的结果
}
}
印刷結果:頂点のグラフィック表現:
結果の分析:
2は度数が最も多いため、ランキング値が最も高く、頂点2の度数は1つだけであり、8であるため、値8は比較的高くなります。度数8は1で、度数1は度数が2つあり、ランキング値を広げます。等々。ランキング値係数の影響もあります。これは予備的なアプリケーションです。