MR统计单词个数

首页 » MapReduce » MR统计单词个数

对一组数据进行统计单词出现个数,总共20万行

MR统计单词个数

map阶段

package hellozhazhalong;
import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
//不能使用基本数据类型,因为要支持序列化反序列化
public class MyMapper extends Mapper<Object, Text, Text, IntWritable>{
 private final static IntWritable one = new IntWritable(1);//value=1
    private Text word = new Text();//key
    
    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
      // hello zhazhalong 102
    //key 放的是偏移量
     //value 放的是文件的每一行
     StringTokenizer itr = new StringTokenizer(value.toString());
     //"\t\n\r\f" 切割
      while (itr.hasMoreTokens()) {
     	 //对一行进行切分并进行循环
        word.set(itr.nextToken());
        context.write(word, one);//引用传递
        //hello 1
        // zhazhalong 1
        //102 1
      }
    }
}

reduce阶段

package hellozhazhalong;
import java.io.IOException;
import java.util.Iterator;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
          //reducer的输入类型来自map的输出
 //相同的key为一组,调用一次reduce方法,在方法内迭代这一组数据,进行计算:sum,count,max....
 private IntWritable result = new IntWritable();
    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context) throws IOException, InterruptedException {
    /*
     * key:hello
     * values:(1,1,1,1,1,1....)
     */
     
//		   Iterator<IntWritable>it =values.iterator();
//		   while(it.hasNext()) {
//			   IntWritable val=it.next();//更新这一组的下一个key是否为true
//		   }
//		   
     
     int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }

}

 

客户端

package hellozhazhalong;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class hello_zzl_count {
public static void main(String[] args) throws Exception {
 Configuration conf = new Configuration(true);
 // 创建Job
 Job job = Job.getInstance(conf);	
    job.setJarByClass(hello_zzl_count.class);

job.setJobName("myjob"); //下面的输入输出方法有局限性。 // job.setInputPath(new Path("in")); // job.setOutputPath(new Path("out")); org.apache.hadoop.fs.Path input =new org.apache.hadoop.fs.Path("/root/hello.txt"); FileInputFormat.addInputPath(job, input ); // FileInputFormat.addInputPath(job, input2 );//多个输入源 Path output=new Path("/output/04");//输出目录不能存在 //下面是删除代码但不建议删除 // if(output.getFileSystem(conf).exists(output)) { // output.getFileSystem(conf).delete(output, true); // } FileOutputFormat.setOutputPath(job, output); //DBInputFormat.setInput(job, inputClass, inputQuery, inputCountQuery); //数据库做输入源 //干预最小值,大切片 // FileInputFormat.setMinInputSplitSize(job, size); // 干预最大值,小切片 // FileInputFormat.setMaxInputSplitSize(job, size); job.setMapperClass(MyMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); //job.setNumReduceTasks(99);//合理根据key设置reduce数量 job.setReducerClass(MyReducer.class); job.waitForCompletion(true); } }

 

MR统计单词个数
结果

分享到:
赞(1) 打赏

评论 7

评论前必须登录!

 

  1. #1

    以后多多交流

    笔记本6个月前 (03-27)
  2. #2

    中国加油小子6个月前 (03-27)
  3. #3

    不错

    靓仔6个月前 (03-27)
  4. #4

    挺明白的

    沥青6个月前 (03-28)
  5. #5

    奥利给

    笨鸟先飞6个月前 (03-28)
  6. #6

    最好再详细点

    hello4个月前 (05-26)
  7. #7

    我加你了哦

    小蚯蚓4个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00