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. centos7 系统安装问题汇总

    centos7 系统安装问题汇总: 1.使用u盘 安装centos7时,一直提示:'.../dev/root  does not exist,could not boot' 解决方法: 2.不能将原来 ...

  2. [SDOI2009]E&D

    题目描述 小E 与小W 进行一项名为“E&D”游戏. 游戏的规则如下: 桌子上有2n 堆石子,编号为1..2n.其中,为了方便起见,我们将第2k-1 堆与第2k 堆 (1 ≤ k ≤ n)视为 ...

  3. Matplotlib初体验

    为一个客户做了关于每个差异otu在时间点上变化的折线图,使用python第一次做批量作图的程序,虽然是很简单的折线图,但是也是第一次使用matplotlib的纪念. ps:在第一个脚本上做了点小的改动 ...

  4. 从JVM字节码执行看重载和重写

    Java 重写(Override)与重载(Overload) 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的 ...

  5. PAGELATCH_x 等待--转载

    转自出处:http://www.cnblogs.com/xwdreamer/archive/2012/08/30/2663232.html 0.参考文献 Microsoft SQL Server企业级 ...

  6. 基于2-channel network的图片相似度判别

    一.相关理论 本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:<Learning to Compare Image Patches via Convolutional Neur ...

  7. git强制push

    Git 如何强制push? $ git push -u origin master –f   文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有 ...

  8. Python之旅本地环境搭建

    刚开始学习Python, 之后将会把Python相关的一些学习在此记录下来 . 毋庸置疑 ,我们需要先搭建本地开发环境, 为之后的Python开发做准备 ,这篇文章 ,将环境的搭建记录下来 第一步: ...

  9. JS 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求: 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  10. 老铁,这年头不会点Git真不行!!!

    版本控制 说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象! 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc 毕业论文_修改3. ...