最近开始学习hadoop,(hadoop 以下简称hd),在完成了hd的环境搭建之后,就开始试着跑那些原始例子,比如其中的wordcount,统计文章中各单词的出现频率。由于本人还在念书,在我们这学期开设的软件工程课上,老师布置了一道题。如下:
请实现程序:筛选出文章中出现频率最高的10个词语。文件大小30k--300k.
一看这题,我立马想到了hd去实现,这300k的数据简直不够塞牙缝,由于本人是新手,就在网上找资料,不料,都没有能完全满足要求的代码。但是本人发现了解决topK问题的方法。并且通过编程,和娄哥的帮助,实现了top10问题,以此与众新手分享。
ps:本程序是在wordcount基础上修改的,并且用的是hd的老mapreduce框架。(mapreduce以下简称mapred)
大致思想是将多个mapred连接起来,将复杂任务分解成一些简单的子任务,每个均需通过单独的mapred作业来完成。
首先,按照mapred框架,在第一次完成mapred之后,每个单词出现的频率会被统计,并且成 键值对(key/value)形式(单词 /次数),reduce之后,单词会成升序进行排序。
由于mapred