在idea上运行Hadoop的MapReduce

项目场景:

在idea上运行Hadoop的MapReduce


问题描述:

处理得到的数据不在返回结果文件中,reducer类没有问题,调试发现reducer类未运行:

	IntWritable key2 = new IntWritable();
    Text value2 = new Text();

    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
/**数据结构:
 * emp:7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
 * dept:20,RESEARCH,DALLAS
 */
        System.out.println("偏移量:" + key + ",value : " + value.toString());
//1、分词
        String[] splits = value.toString().split(",");
//2、区别emp和dept. check if its emp or dept  file
        if (splits.length >= 8){ //读取的是emp表数据
            String empName = splits[1]; // employee name
            String empDept = splits[7]; //deptno
            key2.set(Integer.parseInt(empDept));
            value2.set(empName);
        }else{ //读取是dept表的数据
            String detpNo = splits[0];
// remember to add a flag to identify if its dept file data
            String deptName = "*" + splits[1];//加*的目的是标识当前的数据是属于部门表里面的
            key2.set(Integer.parseInt(detpNo));
            value2.set(deptName);
        }

	}

原因分析:

在map类中忘记调用context.write,进而导致没有数据传给reducer。


解决方案:

加上

IntWritable key2 = new IntWritable();
    Text value2 = new Text();

    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
/**数据结构:
 * emp:7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
 * dept:20,RESEARCH,DALLAS
 */
        System.out.println("偏移量:" + key + ",value : " + value.toString());
//1、分词
        String[] splits = value.toString().split(",");
//2、区别emp和dept. check if its emp or dept  file
        if (splits.length >= 8){ //读取的是emp表数据
            String empName = splits[1]; // employee name
            String empDept = splits[7]; //deptno
            key2.set(Integer.parseInt(empDept));
            value2.set(empName);
        }else{ //读取是dept表的数据
            String detpNo = splits[0];
// remember to add a flag to identify if its dept file data
            String deptName = "*" + splits[1];//加*的目的是标识当前的数据是属于部门表里面的
            key2.set(Integer.parseInt(detpNo));
            value2.set(deptName);
        }
//3、通过context写出去. Mapper output
        context.write(key2,value2);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值