Hadoop WordCount统计小说每个字的出现的次数并排序

闲来无事,想看看小说中的什么字出现的频率比较高,就改了一下WordCount的程序。

原理:

  主要的核心就是WordCount,那就先说下WordCount。

WordCount:

  Map:

  对每一行的输入,扫描到一个单词就将key设置为这个字符,将value设置为1。

Combiner:

  将同一个key中的链表中的value进行求和求出暂时这个字符的次数,key不变,value为新的次数。

Reduce:

  和Combiner的工作是一样的,Combiner就是为了减少中途的数据传输量。

上面就是最基础的WordCount了,我们要改进的是两个操作,一个是能读中文字符,第二个就是按照降序排列。

一:读中文字符:

原来的WorCount是根据空格Tab符进行分割,分割后是一个个的单词,而我们要将其改为中文字符就要用正则表达式的匹配了,在“UTF-8“编码下的中文字符的正则表达式为“[\\u4e00-\\u9fa5]”。(一定要小心的编码,如果编码不对结果就会出现错误,可以将文本主动保存为utf-8格式的就可以了。)然后将所有的找出来作为key就可以了。

Pattern p=Pattern.compile("[\\u4e00-\\u9fa5]");
Matcher matcher = p.matcher(line);
                while (matcher.find()) {
                    word.set(matcher.group());
                    context.write(word, one);
                    //System.out.println(word);
                }

二:降序排列:

  这个我一开始以为可以很简单的,将结果并没有我想象的那么简单,相当于在程序里执行了两次作业,一次统计词频,一次专门排序。排序作业首先在map中将前面结果中的key,value中的值对调,所以现在key是词频,而value是汉字,然后重写IntWritable的 Comparator 类:

 private static class IntWritableDecrea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值