hadoop 中文词频排序 top-k 问题

本文介绍了如何使用Hadoop MapReduce解决统计文件中出现次数最多的单词问题。通过分词、MapReduce任务连接,实现了对中文文本的词频统计,最终找出频率最高的前k个词汇。在实例中,分析了金庸小说中的人物词频,揭示了韦小宝角色的重要性。
摘要由CSDN通过智能技术生成

    本人最近一直在hadoop领域,摸爬滚打,由于最近老是布置了一项作业:让统计一个文件中出现次数最高的单词。一看到题目我就想用hadoop来实现这个问题,由于有现成的wordcount框架,所以就在这之上进行程序的修改添加即可。

    准备过程:

    1、我去下载了金庸的小说全集,顺便分析分析,看他老人家笔下,谁的戏份更重。

    2、由于是中文分词,所以必须要有一个中文分词器,找到了一个java版的apache开源分词器。性能还行,但是在一些词语拆分上还是有些不够智能。它的算法实现是用到了RMM算法,在次不多介绍。

    编码设计:我用的是mapreduce老框架,并且程序实现需要连接多个mapreduce任务,所以就在此介绍mapreduce的设计思路吧

    1、在wordcount的基础上,第一个map实现分词,并筛选出key/value键值对(如:张无忌  ----  1)并输出。map的分词过程,会按照行进行划分。

    2、第一个个reduce接收第一个map的键值对,然后进行累加整合。reduce接收的是key/<value--list>同一个key的所有值会被整合成一个列表,作为reduce的输入如(张无忌:1,1,1,1,1)。最终reduce加工后的输出是key/value,如(张无忌  5)。

    3、第二个map,此处是调用了hadoop的api,Inversemaper.class 其实现功能是将key和value位置进行互换。这样做的原因是,hadoop默认对key进行升序排序,由于我们要统计的是最多的单词,所以需要的数量进行排序,数量在第一个reduce的输出中,为value,所以该步需要对key和value进行互换。   

    4、然后对key进行降序排序

    5、最后一个map,作为计数器,显示出词频出现最高的k个词语。

    这个程序差不多就介绍完了,这是我做的统计我们
4380 张无忌
4623 只见
4643 两人
4873 黄蓉
4994 不知
5055 杨过
5285 心想
5352 令狐冲
5462 听得
5501 师父
5569 他们
5905 心中
6173 郭靖
6309 武功
6487 一声
6697

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值