zoukankan      html  css  js  c++  java
  • MapReduce显示最受欢迎的Top10课程(按照课程编号)

      上篇博客已经说过,会将代码进行优化,并通过TreeMap进行排序实现,现在简单说明一下代码的思路。

      项目以上传到github:https://github.com/yandashan/MapReduce_Count2.git


      这次的代码是根据课程的id进行排序的,map的流程和普通的WordCount流程差不多,只是实现了在分割数据时对数据的读取和分割功能,然后在reduce上下了一些文章。

      我们知道,在MapReduce执行过程中会执行一个一个Task的方法,用于数据传输过程中的缓存,我们的想法,就是在接收到map传输过来的数据之后,不是立刻输出,而是把它放在一个TreeMap中,实现自动的排序,然后等待Reduce Task将所有map发送过来的数据全部收集完毕后,再执行cleanup方法(cleanup方法使在所有的reduce方法执行完毕之后才开始执行的),我们也就是在cleanup中设置方法,按照一定的要求将数据进行发出。大体流程如下图:


    关键代码:

      MyReduce:

     

       将value的值进行取出,累加求和,并且封装到PageCount对象中,暂时存储到TreeMap。

      cleanup:

      

       在执行job方法时进行动态的设置,然后在job方法中进行设置。

      

       结果如下图所示;

          


      

      关于在运行过程中,通过传递不同参数获取输出前几位的值,我们有以下几种方法进行选择。

      第一种方法:

      按照上面的代码进行操作。

      第二种方法:

      在运行过程中,向主函数中传递一个值

      

       右击主函数,选择Run As-》Run Configurations...  在这里输入你要输出的个数。

      

      以上两种方法都是通过代码设置进行的,但是在实际的项目中,我们为了尽量少的更改代码,不能将值写死,所以,我们采用配置文件的方法进行设置。

      第三种方法:

      创建一个属性配置文件topn.properties,输入 top.n = 10 ,即动态设置top.n的值,在job主方法中写如下代码:

      

       第四种方法:

      通过加载XML文件进行解析。

      XML文件中写如下代码:

      

       然后加载XML文件:

      

      

  • 相关阅读:
    移动端支付6位密码框
    移动端canvas刮刮乐
    原生ajax请求json数据
    canvas绘制video
    移动端阻止默认长按选中文本和弹出菜单、点击阴影
    前端移动端相关的代码(pc端与移动端自动切换)
    统一管理网站中的某些需要定期更新的时间届数 倒计时 ( 换届 之类的网站)( 兼容ie )
    Hbuilder 常用快捷键汇总
    文件找不到,路径错误问题
    图片清晰度问题
  • 原文地址:https://www.cnblogs.com/yandashan666/p/11889787.html
Copyright © 2011-2022 走看看