当前位置:   article > 正文

一个简单的mapreduce程序---统计每个单词出现次数_mapreduce统计单词出现次数

mapreduce统计单词出现次数

因为会对key进行排序,所以要把需要排序的元素写到key中

例如:统计单词出现次数,并按照次数降序。

           可以这样:map阶段输出<单词,1>,reduce阶段输出<单词,n>,map阶段输出<n,单词>,reduce阶段输出<单词,n>

 

统计每个单词出现次数

1.  定义一个Mapper类

2.  定义一个Reducer类

3.  定义一个Driver类(本机模拟运行)

附代码:

https://github.com/YanYuPS/wordCountSimple.git
  1. //Map:每个单词记一个1
  2. //输入key(一行文本的偏移量),输入value(一行文本内容),输出key(单词),输出value(单词个数)
  3. public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
  4. //MapTask调用map方法,每读取一个(keyIn,valueIn),就调用一次map方法
  5. @Override
  6. protected void map(LongWritable key, Text value, Context context)
  7. throws IOException, InterruptedException {
  8. //获取每一行的文本内容
  9. String lines = value.toString();
  10. String[] words = lines.split(" ");
  11. for (String word :words) {
  12. context.write(new Text(word), new IntWritable(1));
  13. }
  14. }
  15. }
  1. //输入key(map的输出key:单词),输入value(map的输出value:单词个数),输出key(单词),输出value(单词个数)
  2. public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
  3. //ReduceTask调用reduce方法:会先将接收到的kv对按照key分组(key相同为一组);然后每组key调用一次reduce方法
  4. @Override
  5. protected void reduce(Text key, Iterable<IntWritable> values,
  6. Context context) throws IOException, InterruptedException {
  7. int count =0;
  8. for(IntWritable v :values){
  9. count += v.get();
  10. }
  11. context.write(key, new IntWritable(count));
  12. }
  13. }
  1. //主类,指定job参数并提交job
  2. public class WordCountDriver {
  3. public static void main(String[] args) throws Exception {
  4. Configuration conf = new Configuration();
  5. Job job = Job.getInstance(conf);
  6. //jar包位置
  7. job.setJarByClass(WordCountDriver.class);
  8. //指定mapper类和reducer类
  9. job.setMapperClass(WordCountMapper.class);
  10. job.setReducerClass(WordCountReducer.class);
  11. //map阶段,输出的数据类型
  12. job.setMapOutputKeyClass(Text.class);
  13. job.setMapOutputValueClass(IntWritable.class);
  14. //输出的数据类型
  15. job.setOutputKeyClass(Text.class);
  16. job.setOutputValueClass(IntWritable.class);
  17. //数据读取组件 输出组件
  18. job.setInputFormatClass(TextInputFormat.class);
  19. job.setOutputFormatClass(TextOutputFormat.class);
  20. //要处理的所有文件,所在文件夹路径
  21. FileInputFormat.setInputPaths(job, new Path("/Users/rainbow/Desktop/wordin"));
  22. //处理结果存放文件夹路径(如已存在,需删除)
  23. FileOutputFormat.setOutputPath(job, new Path("/Users/rainbow/Desktop/wordout"));
  24. //向yarn集群提交job
  25. boolean res = job.waitForCompletion(true);
  26. System.exit(res?0:1);
  27. }
  28. }

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/337599
推荐阅读
相关标签
  

闽ICP备14008679号