消失552 2022-11-16 20:23 采纳率: 33.3%
浏览 25
已结题

mapreduce代码,需要注释解答

img

img


mapreduce的代码,能不能来个厉害的弄个注释。要每步详细的注释,急

  • 写回答

4条回答 默认 最新

  • yy64ll826 2022-11-21 21:57
    关注

    你这个是求每一个单词出现得个数

    编写Mapper类
    public class TokenizerMapper extends Mapper<Object,Text,Text,IntWritable> { 
      @Override
        public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
            String line = value.toString();//读取一行数据
            StringTokenizer st = new StringTokenizer(line);//使用空格分隔
            while (st.hasMoreTokens()) {
                String word = st.nextToken();//单词
                context.write(new Text(word), new IntWritable(1));//单词---> 1
            }
        }
    }
    编写Reducer类
    
    public class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        @Override
        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum = 0;//汇总
            for (IntWritable val : values) {
                sum += val.get();
            }
            context.write(key, new IntWritable(sum));//单词--->数量
        }
    }
    
    本地部署得运行代码
    public class WordCount {
        public static void main(String[] args) throws Exception {
            Configuration cfg = new Configuration();//创建配置对象
            conf.set("mapreduce.framework.name","local");
            //本地模式运行mr,输入输出的数据可以在本地,也可以在hdfs
            //conf.set("fs.defaultFS","hdfs://hcmaster:9000");
            conf.set("fs.defaultFS","file:///");
            
            Job job = Job.getInstance(cfg, "word count");//创建job对象
            
            job.setJarByClass(WordCount.class);//创建运行job的类
            
            job.setMapperClass(TokenizerMapper.class);//设置mapper类
            job.setReducerClass(IntSumReducer.class); //设置Reduce类
            
            job.setOutputKeyClass(Text.class);//设置Reduce输出的key
            job.setOutputValueClass(IntWritable.class);//设置Reduce输出的value
    
            FileInputFormat.addInputPath(job, new Path(args[0]));//设置输入路径
    
            Path op1 = new Path(args[1]);
            FileSystem fs = FileSystem.get(cfg);
    
            if (fs.exists(op1)) {
                fs.delete(op1, true);
                System.out.println("存在此输出路径,已删除!!!");
            }
    
            FileOutputFormat.setOutputPath(job, op1);//设置输出路径
            boolean b = job.waitForCompletion(true); //提交job
            System.exit(b ? 0 : 1);
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 修改了问题 11月23日
  • 创建了问题 11月16日

悬赏问题

  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)