设为首页 收藏本站
查看: 1734|回复: 0

Hadoop 词频统计(续)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-11 12:46:15 | 显示全部楼层 |阅读模式

  上一篇文章(http://blog.iyunv.com/zythy/article/details/17852579)提到,词频统计的结果不是我们理想的结构,不够直观。这一篇文章我们继续优化统计结果。
  
  上一篇程序运行的最终结果如下,单词字符数相同的词频统计结果放在一个单独的文件中,比如长度为5的单词统计结果:
DSC0000.jpg

  如上图所示,统计结果仅仅是按照Key排序,Value值没有顺序。而我们最终希望的是:
  1)  统计结果在一个最终文件中,而不是分散到很多文件中。
  2)  统计结果按Value值,及单词出现的频率排序。
  
  应该有很多方法可以实现以上的要求,我们以比较简单的方式来完成这个需求。我们将充分利用Hadoop的shuffle功能。
  本质问题是,Map传递给Reduce的键值对是由Hadoop排过序的,而Reduce的输出结果本身不会进行排序。虽然我们看到的每一个Reduce的输出结果是按Key排序的,但是这种有序结果不是Reduce处理而来的,而是因为传递给Reduce的输入是有序的。(可参考Hadoop的Shuffle功能介绍)。
  回到主题,如果我们能将上图的统计结果的Key和Value互换,变成以下形式:
346 about

10   above

4    adage

16   adapt

6    adept

2    admit

42   adult

然后经由Map处理(及时Map什么都不做),则Map后的输出将会按照Key排序,变成如下形式:

2    admit

4    adage

6    adept

10   above

16   adapt

42   adult

346 about


这个不正是我们所需要的吗? 正是!

但是此时另一个问题将会出现,有可能多个单词出现的频率一样,比如 is 和 are均出现100此,则Map的输入文件中将会有:

is   100

are  100

而Map处理后的输出中将只会有are而没有is:

100 are

道理很简单,key值是唯一的。

此时我们可以将key和value组合成一个新的复合key,比如:

0000100is     is

0000100are    are

新的key值包含词频数据和单词本身,这样我们就能保证Map的输入中的每一个键值对都可以得到保留。而且,Map的输出文件按照新的Key排序后,本身词频也变成有序的了。

下一步就要交给Reduce来处理了,Reduce重新将键值对翻转,但是在处理Reduce的Value,即词频数值时,需要从输入的key中做截取。(我们可以采用前补零的方式将词频数值统一处理成10位长度,外加单词本身作为Key)。

最终结果如下图:

DSC0001.jpg

  
  源代码下载
完整源代码下载地址:

http://download.iyunv.com/detail/zythy/6811871

如果你通过Hadoop提交作业,输入的命令行如下:

DSC0002.jpg


其中file:///home/user/Desktop/Downloads是数据文件的存放路径

后两个参数分别为作业1和作业2的输出文件地址。

注:我们采用了两个作业来处理这个需求。

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-137901-1-1.html 上篇帖子: 用Hadoop构建电影推荐系统 下篇帖子: Alex 的 Hadoop 菜鸟教程: 第20课 工作流引擎 Oozie
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表