PageRank的MapReduce实现

如何用 Hadoop 的 MapReduce 思想来计算 PageRank 呢?其实理解起来还是很简单的。PageRank的计算公式如下:

Rv=alpha * Sigma(Rn/Nn)+ (1-apha)/N

Mapper 的输入格式为:
(节点,PageRank 值)->(该节点的外部链接节点列表)

Mapper 的输出格式为:
(节点) -> (该节点的反向链接节点,反向节点的 PankRank 值/反向节点的外链个数)

Reducer 的输入格式(Mapper 的计算输出)为:
(节点) -> (该节点的反向链接节点,反向节点的 PankRank 值/反向节点的外链个数)

Reducer 的输出为:
(节点, 新的 PageRank 值)
假设有物理节点 A,B 参与计算,其中网页1、2保存于 A,网页3、4保存于 B,各个网页的 PageRank 初始值是1.0,alpha 值取 0.85,那么运算过程如下:

节点 A 上做 Mapper:
输入为:
(1,1.0)-> (2,3,4)
(2,1.0)-> (3,4)

输出为:
(2)-> (1,1.0/3)
(3)-> (1,1.0/3)
(4)-> (1,1.0/3)
(3)-> (2,1.0/2)
(4)-> (2,1.0/2)

节点 B 上做 Mapper:
输入为:
(3,1.0)-> (4)
(4,1.0)-> (2)

输出为:
(4)-> (3,1.0)
(2)-> (4,1.0)

Reducer:
输入为 节点 A 和 B 的输出。
计算新的 PageRank 结果如下:
(1): 0 + (1-0.85)/4
(2): 0.85*(1.0/3+1.0)+ (1-0.85)/4
(3): 0.85*(1.0/3+1.0/2)+ (1-0.85)/4
(4): 0.85*(1.0/3+1.0/2+1.0)+ (1-0.85)/4

多次迭代得出稳定的 PageRank 值。
伪代码:

Mapper函数的伪码:

input <PageN, RankN> -> PageA, PageB, PageC ... // 链接关系
begin
    Nn := the number of outlinks for PageN;
    for each outlink PageK
        output PageK -> <PageN, RankN/Nn>
    // 同时输出链接关系,用于迭代
    output PageN -> PageA, PageB, PageC ...
end

Mapper的输出如下(已经排序,所以PageK的数据排在一起,最后一列则是链接关系对):

PageK -> <PageN1, RankN1/Nn1>
PageK -> <PageN2, RankN2/Nn2>
...
PageK -> <PageAk, PageBk, PageCk>

Reduce函数的伪码:

input mapper's output
begin
    RankK := 0;
    for each inlink PageNi
        RankK += RankNi/Nni * beta
    // output the PageK and its new Rank for the next iteration
    output <PageK, RankK> -> <PageAk, PageBk, PageCk...>
end

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值