当前位置:   article > 正文

MapReduce实现统计单词出现次数_mapreduce统计单词次数。

mapreduce统计单词次数。

 首先写一个WordMapper类

  1. package com.kgc.myhdfs001.wc;
  2. import org.apache.hadoop.io.LongWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Mapper;
  5. import java.io.IOException;
  6. /*WordMapper继承Mapper,注意继承的这个Mapper是org.apache.hadoop.mapreduce里面的
  7. 该类就是mr程序map阶段调用的类,也就是maptask。负责把单词一个个分割出来
  8. Long String是jdk自带的数据类型
  9. 在网络传输序列化中 hadoop认为其效率不高,所以自己封装了一套数据类型,包括自己的序列化机制(Writable)
  10. Long----->LongWritable
  11. String--->Text
  12. */
  13. public class WordMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
  14. @Override
  15. //Alt+ins重写map方法,LongWritable相当于Long,但它可序列化,key是行的起始偏移量(光标所在的偏移值)
  16. //Text相当于String,value是行的内容
  17. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  18. System.out.println(key);
  19. //将内容转化成String,并按照空格分隔,得到个数组,数组里面存的是一个个单词
  20. String[] words = value.toString().split(" ");
  21. //遍历数组 单词出现就标记1
  22. for(String word:words){
  23. //使用context把map处理完的结果写出去
  24. context.write(new Text(word),new LongWritable(1));
  25. }
  26. }
  27. }

然后写WordReducer类

  1. package com.kgc.myhdfs001.wc;
  2. import org.apache.hadoop.io.LongWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Reducer;
  5. import java.io.IOException;
  6. /*
  7. WordReducer继承Reducer类,注意这个类是org.apache.hadoop.mapreduce.Reducer
  8. 该类就是mr程序reduce阶段运行的类 ,也就是reducetask。负责汇总统计单词个数
  9. */
  10. public class WordReducer extends Reducer<Text, LongWritable,Text,LongWritable> {
  11. @Override
  12. protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
  13. int count=0;
  14. for(LongWritable lw:values){
  15. count+=lw.get();
  16. }
  17. context.write(key,new LongWritable(count));
  18. }
  19. }

写这些类的时候导包一定不要导错

 然后写主类

  1. package com.kgc.myhdfs001.wc;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.LongWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Job;
  7. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  8. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  9. public class WordJob {
  10. public static void main(String[] args) throws Exception{
  11. //使用job构建本次mr程序
  12. Job job = Job.getInstance(new Configuration());
  13. //指定本次mr程序运行的主类
  14. job.setJarByClass (WordJob.class);
  15. //读哪个文件
  16. FileInputFormat.setInputPaths(job,new Path("file:///d:/temp/read/a.txt"));
  17. //读完统计个数的结果放哪里(write这个文件夹不要提前创建出来,否则会报错)
  18. FileOutputFormat.setOutputPath(job,new Path("file:///d:/temp/write"));
  19. //指定本次mr程序的mapper
  20. job.setMapperClass(WordMapper.class);
  21. //指定本次mr程序map阶段的输出类型
  22. job.setMapOutputKeyClass(Text.class);
  23. job.setMapOutputValueClass(LongWritable.class);
  24. //指定本次mr程序的reducer
  25. job.setReducerClass(WordReducer.class);
  26. //指定本次mr程序reduce阶段的输出类型
  27. job.setOutputKeyClass(Text.class);
  28. job.setOutputValueClass(LongWritable.class);
  29. job.waitForCompletion(true);
  30. }
  31. }

 

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

闽ICP备14008679号