统计词频

MapReduce统计词语出现次数

五迷三道 提交于 2019-11-27 19:09:51
晨曦同学(Dota界号称利神)前段时间分享了这样一个问题:如何在一个很大的文件中(该文件包含了中英文)找出出现频率比较高的几个词呢?我们来分析一下。找出现频率比较高的词语,首先要有一个支持中文的分词器(IK,庖丁解牛等等),这个问题不大;分词之后呢就要统计词语出现次数,类似于MapReduce程序中WordCount,这可是学习MapReduce的hello world程序呀,当然很容易搞定;最后还要来个排序,统计完了我们期望出现次数高的词语出现在前面,MapReduce默认就支持排序,也没问题。 解决这个问题需要两个Job,一个是统计Job,一个是排序Job。 统计Job的Mapper需要做的事情就是分词,这里我们选用IKanalyzer分词器,可能IK在官网上不好下载,我给大家准备好了, 点此下载 。分词之后,将每个单词个数置为1(跟WordCount程序一样)。 public static class AnalyzerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override protected void map