1、PageRank 原理
(1) 算法定义:
PageRank 算法 |
输入:所有节点的初始权重值;节点邻接矩阵;迭代次数n 输出:节点权重值 while i < n: for x in nodelist: PR(x) = a + (1-a)*sum(PR(t)/C(t)) end for end i |
(2)算法示例(注:为简单起见,示例中省去了常量a和系数1-a)
PR(n2)=PR(n5)/C(n5)+PR(n1)/C(n1)=0.2/3+0.2/0.1=0.166
在计算节点n3时,仍使用PR(n2)=0.2。在图中所有节点更新一遍后,节点的PR值才会更新。
2、MapReduce 实现 PageRank
思路简介:
1、预处理输入文件
由于PageRank为迭代算法,map的输入与reduce的输出格式需要一致。第一次迭代结果需要传递给第二次迭代,所以在Reduce输出时需要保留第一轮迭代后的各用户的PR值。因此,需要对input文件进行预处理,为各节点初始化PR值为1。
2、Map
在计算过程中,不仅需要向reduce端传送当前节点对其link的其他节点的贡献值,还需要传递link的情况。“link:”开始的value值保存的是节点间的关系,“pr:”开始的value值保存的是节点的贡献值。在数据集中,有些节点的出度0,仅需要记录