【Hadoop学习之九】MapReduce案例分析三-PageRank

环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  jdk8
  hadoop-3.1.1

什么是pagerank?
算法原理-1
PageRank是Google提出的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。
算法原理:思考超链接在互联网中的作用?
入链 =投票
  PageRank让链接来“投票“,到一个页面的超链接相当于对该页投一票,比如A网页有一个指向B网页的链接,那么B网页就得到A的1个投票。
入链数量
  如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。就是有很多网页指向B网页。
入链质量
  指向页面B的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面B,则页面B越重要。
  就是考虑指向B网页的源网页自身的入链数量,如果源网页入链很低,那么塔指向B的价值也同样很低。


算法原理-2
初始值
  Google的每个页面设置相同的PR值
  pagerank算法给每个页面的PR初始值为1。
迭代计算(收敛)
  Google不断的重复计算每个页面的PageRank。那么经过不断的重复计算,这些页面的PR值会趋向于稳定,也就是收敛的状态。
  在具体企业应用中怎么样确定收敛标准?
  1、每个页面的PR值和上一次计算的PR相等
  2、设定一个差值指标(0.0001)。当所有页面和上一次计算的PR差值平均小于该标准时,则收敛。
  3、设定一个百分比(99%),当99%的页面和上一次计算的PR相等

算法原理-3
站在互联网的角度:
  只出,不入:PR会为0
  只入,不出:PR会很高
  直接访问网页
修正PageRank计算公式:增加阻尼系数
  在简单公式的基础上增加了阻尼系数(damping factor)d
  一般取值d=0.85。
完整PageRank计算公式


  d:阻尼系数
  M(i):指向i的页面集合
  L(j):页面的出链数
  PR(pj):j页面的PR值
  n:所有页面数

如何设计MR?

PR计算是一个迭代的过程,首先考虑一次计算
思考:
--页面包含超链接
--每次迭代将pr值除以链接数后得到的值传递给所链接的页面
--so:每次迭代都要包含页面链接关系和该页面的pr值
--mr:相同的key为一组的特征
map:
  1,读懂数据:第一次附加初始pr值
  2,映射k:v
    1,传递页面链接关系,key为该页面,value为页面链接关系
    2,计算链接的pr值,key为所链接的页面,value为pr值
reduce:
  *,按页面分组
  1,两类value分别处理
  2,最终合并为一条数据输出:key为页面&新的pr值,value为链接关系

具体数据分析:

A B D
B C
C A B
D B C

第一轮迭代:
map:
  A:BD
  B:1/2
  D:1/2
  A:1/2
reduce:
  A:1/2 B D

第二轮迭代:
map:
  A: 1/2, B D
  B:1/4
  C:1/4
  A:3/4
reduce:
  //A: 1/2, B D
  //A:3/4
  A: 3/4,B,D

猜你喜欢

转载自www.cnblogs.com/cac2020/p/10302564.html