mapreduce版pagernak

 PageRank是什么

PageRank,网页排名。PageRank 计算每一个网页的PageRank值,并根据PageRank值的大小对网页的重要性进行排序。PageRank的基本思想是:对于一个网页A来说,链接到A的页面越多,且链接到A的页面的PageRank值越大,网页A的PageRank值越大。

简单的PageRank计算

首先我们对整个Web进行一个简单化处理:

  1. 将每一个页面看做一个节点;

  2. 如果页面A 链接页面B,则存在一条从A到B的有向边。

    整个Web就被抽象成一个有向图,现在假设只有四张网页,它的结构如图所示。

显然该图是强联通的(从任一节点出发都可以达到另一任节点)。对于页面A来说,它链接到页面B,C,D,即A有3个出链,则它跳转到每个出链B,C,D的概率均为1/3.。如果A有k个出链,跳转到每个出链的概率为1/k。同理B到A,C,D的概率为1/2,0,1/2。C到A,B,D的概率为1,0,0。D到A,B,C的概率为0,1/2,1/2。

通常我们使用一种合适的数据结构来表示页面间的链接关系。设一共有N个页面,则要生成一个N维矩阵,其中第i行表示的是其他页面对 第i个页面链接的概率,第j列表示的是第j个页面对其他页面链接的概率。这样的矩阵叫做转移矩阵。对应到上图,转移矩阵为:

在上图中,第一列为页面A对各个页面转移的概率,第一行为各个页面对页面A转移的概率。初始时,每一个页面的PageRank值都是均等的,为1/N,这里也即是1/4。然后对于页面A来说,根据每一个页面的PageRank值和每个页面对页面A的转移概率,可以算出新一轮页面A的PageRank值。这里,只有页面B和页面C转移了自己的1/2给A。所以新一轮A的PageRank值为1/41/2+1/41/2=9/24。

为了计算方便,我们设置各页面初始的PageRank值为一个列向量V0。然后再基于转移矩阵,我们可以直接求出新一轮各个页面的PageRank值。即 :

现在得到了各页面新的PageRank值V1, 继续用M 去乘以V1 ,就会得到更新的PageRank值。一直迭代这个过程,可以证明出V最终会收敛。此时停止迭代。这时的V就是各个页面的PageRank值。在上图中,一直迭代的中间V如下:

 mapreduce版pagerank实现:

https://github.com/xiangyuguan

 

posted @ 2019-07-10 19:45  北漂屌丝  阅读(260)  评论(0编辑  收藏  举报