PageRank

1.    概念

2.    原理


 

3.    java代码实现思路

 
1、定义收敛标准
    每次算出新的pr-oldpr=差值 ,所有页面的差值累加 ,除以pagecount,得到avg差值 ,如果。小于0.01
2、计算总页面数,并且算出每个页面的初始pr值=1/pagecount
3、

    A  0.25 B  D ----- A  0.35 B D--- A  0.29 B D----

 
数据集:
 
一个MapReduce(如何做到循环)
    1. Job的设计
           定义一个收敛值d=0.01,一直循环进行MapReduce操作,当所有页面和上一次计算的pr差值平均小于该标准时,则收敛,跳出循环
  1. boolean flag = job.waitForCompletion(true);
  2. if(flag){
  3. System.out.println(job.getJobName()+" run success");
  4. //获取计数器中的差值
  5. long sum = job.getCounters().findCounter(Mycounter.my).getValue();
  6. System.out.println("SUM: "+ sum);
  7. double avg = sum /4000.0;
  8. if(avg < d){//满足设定的值,跳出循环
  9. break;
  10. }
  11. }
           统计计算的次数i,conf.setInt("runCount", i);便于从上一次的输出中读取数据
                 inputPath和outputPath的设计
  1. Path inputPath =newPath("/user/pagerank/input/pagerank.txt");
  2. //如果不是是第一次计算
  3. if(i >1){
  4. inputPath =newPath("/user/pagerank/output/pr"+(i-1));
  5. }
  6. FileInputFormat.addInputPath(job, inputPath);
  7. Path outputPath =newPath("/user/pagerank/output/pr"+ i);
  8. FileSystem fs =FileSystem.get(conf);
  9. if(fs.exists(outputPath)){
  10. fs.delete(outputPath,true);
  11. }
  12. FileOutputFormat.setOutputPath(job, outputPath);
                 
    2. Mapper的设计
      Mapper端数据的输入--key:Text   value:Text   key:A   value:B   D
             (job端在进行Mapper操作之前,将数据进行了格式处理job.setInputFormatClass(KeyValueTextInputFormat.class);key,value转化为Text格式)
 
      步骤一:获取运行的次数,判断是否是第一次进行map操作,如果是第一次,赋予1.0默认值,然后将value(1.0    B    D)封装为Node对象
      步骤二:将计算前的数据进行输出,key:A    value:1.0    B    D context.write(new Text(page),new Text(node.toString())
      步骤三:如果网页有出链,计算对当前page,对其他网页的出链值key:B    value:0.5  ||  key:D    value:0.5
      
      Mapper端数据的输出:
                                             第一种--key:A    value:1.0    B    D
                                             第二种--key:B    value:0.5  ||  key:D    value:0.5
            
    3. Reducer的设计
        Reducer端数据的输入--第一种--key:A    value:1.0    B    D   第二种--key:A    value:0.5  ||  key:A    value:0.75
        
        步骤一:遍历Iterable<Text>对象,里面有两种数据(value:1.0    B    D  ||  value:0.5
                       无论哪种数据,首先将value转化为Node对象,其次,如果是前者将该node定义为上次的node(sourceNode),否则,获取该node的pageRank(其他网页对该page的投票值),进行sum累加(sum的最终结果也就是本次计算其他page对当前page的投票值总和),比如页面A本次一共获得1.25来自于其他页面的投票
         步骤二:计算新的pr值double newPR = (0.15 / 4.0) + (0.85 * sum);并与之前的也就是上一次的pr值进行比较(上一次的pr值存放在sourceNode中)double d = newPR - sourceNode.getPageRank(); 将差值结果放到累加器中
context.getCounter(Mycounter.my).increment(j);
         步骤三:更新page上一次的pr值--sourceNode.setPageRank(newPR);
         步骤四:数据输出,key:A    value:1.25    B    D--context.write(key, new Text(sourceNode.toString()));
 

 

PageRank_网页排名_MapReduceJava代码实现思路的更多相关文章

  1. ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路

    ItemCF_基于物品的协同过滤 1.    概念 2.    原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3.    java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...

  2. spring-mvc实现模拟数据到网页展示过程代码

    spring-mvc实现模拟数据到网页展示过程代码 先看看我们的3种模拟数据到网页展示的思路图: 1.当mybatis的环境配置完成.一个动态Web项目建立好.开始导入jar包. -spring的ao ...

  3. 网页排名算法PagaRank

    网页排名算法PageRank PageRank,网页排名,又叫做网页级别.是一种利用网页之间的超链接数据进行计算的方法.它是由Google的两位创始人提出的. 对于用户而言,网页排名一般是比较主观的, ...

  4. PageRank 算法-Google 如何给网页排名

    公号:码农充电站pro 主页:https://codeshellme.github.io 在互联网早期,随着网络上的网页逐渐增多,如何从海量网页中检索出我们想要的页面,变得非常的重要. 当时著名的雅虎 ...

  5. 第十章 PageRank——Google的民主表决式网页排名技术

    搜索引擎的结果取决于两组信息:网页的质量信息,这个查询与每个网页的相关性信息.这里,我们介绍前一个. 1.PageRank算法原理 算法的原理很简单,在互联网上,如果一个网页被很多其他网页所链接,说明 ...

  6. Bootstrap css栅格 + 网页中插入代码+css表格

    设计达人 http://www.shejidaren.com/30-minimal-app-icons.html CSS栅格: <!DOCTYPE html> <html lang= ...

  7. 网页嵌入WMP代码(转)

    网页嵌入WMP代码 播放器代码解释,装了9.0或9.0以上的播放器才能正常使用: OBJECT id="WMP" height="176" width=&quo ...

  8. 总结PHP中几种常用的网页跳转代码

    网页跳转的意思就是指当你在浏览器中访问A页面时,会自动跳转到B页面,往往网页跳转用在404页面中会比较多点.至于怎么实现网页跳转,网上已经提供了很多的方法,有些方法是不可行的,经过测试,叶德华今天就在 ...

  9. TF-IDF_MapReduceJava代码实现思路

    TF-IDF 1.    概念   2.    原理   3.    java代码实现思路 数据集:   三个MapReduce 第一个MapReduce:(利用ik分词器,将一篇博文,也就是一条记录 ...

随机推荐

  1. python实现二分查找算法

    二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...

  2. MySQL 优化实施方案

    1.1 前言 在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已.更多关于MySQL查询相关参照 ...

  3. linux网路编程:字节序(大端、小端、网络、主机)

    字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...

  4. linux系统编程快速定位头文件的技巧之强大的grep命令

    这个技巧来自于我的实际开发碰到的: inet_addr这个函数用于把ip地址转成网络字节序,他的原型:in_addr_t inet_addr(const char *cp); 返回值为一个in_add ...

  5. this与base关键字

    this关键字 this关键字代表当前对象,通过this关键字可以访问当前对象的成员.(当前对象的成员:自己本身的成员+从父类继承过来的所有的成员.) this关键字可以访问:本类的所有成员和父类的非 ...

  6. 【Python3之函数对象】

    函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First- ...

  7. word在线问题

    1.js代码如下 var sdata = "";$(function(){ var pathdoc = path.split("."); var explore ...

  8. Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集

    S4/HANA里有一个新的UI框架叫做Smart template, 配合ABAP后台的CDS view技术,能够让developer以Metadata driven的方式来开发Fiori应用, 这种 ...

  9. .net 平台下, Socket通讯协议中间件设计思路(附源码)

    .net 平台下,实现通讯处理有很多方法(见下表),各有利弊: 序号 实现方式 特点 1 WCF 优点:封装好,方便.缺点:难学,不跨平台 2 RocketMQ,SuperSocket等中间件 优点: ...

  10. k-vim常见快捷键

    前段时间看到wklken分享的k-vim配置,试用了下真的爽到飞起. 不过唯一不爽的是有一些快捷键一直记不住,现在整理些常用的快捷键,以备查阅. F2 set nu/nonu,行号开关,用于鼠标复制代 ...