Mapreduce 类型传递错误

本文探讨了MapReduce中不同类型数据从Map阶段到Reduce阶段的传递过程。通过具体实例展示了如何处理不同文件输入,并在Reduce阶段正确聚合数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Mapreduce 类型传递错误

 

以下是部分源码(由map传递value数据类型到reduce去接受)

publicclass Order2User {

 

    publicstaticclass OrderMapper extends Mapper<LongWritable, Text, Text, Text>{

       String name =null;

       @Override

       protectedvoid setup(Mapper<LongWritable, Text, Text,Text>.Context context)

              throws IOException, InterruptedException {

           FileSplit ins = (FileSplit)context.getInputSplit();

           name = ins.getPath().getName();

       }

       @Override

       protectedvoid map(LongWritable key, Text value, Mapper<LongWritable, Text,Text, Text>.Context context)

              throws IOException, InterruptedException {

          

           if(name.endsWith(".txt")){

              String[] split = value.toString().split(",");

              User user = new User();

           user.set(split[0], split[1], split[2], split[3], split[4]);

           context.write(new Text(split[0]), new Text(user.toString()));

          

           }else{

              String[] split = value.toString().split(",");

              String oid = split[0];

              String uid = split[1];

              context.write(new Text(uid), new Text(oid+"-o"));

           }

       }

    }

    publicstaticclass OrderReduce extends Reducer<Text, Text, Text, Text>{

       @Override

       protectedvoid reduce(Text key, Iterable<Text> value, Reducer<Text, Text, Text,Text>.Context context)

              throws IOException, InterruptedException {

           

           StringBuilder sb = new StringBuilder();

           ArrayList<Text> list = new ArrayList<>();

           //ArrayList<String>list = new ArrayList<>();//这是正确的写法。

          

           for (Text va : value) {

              if(va.toString().endsWith("-o")){

                  sb.append(va.toString()).append(" ");

              }else{

                  list.add(va);

                  //list.add(va.toString());这是正确的

              }

           }

       /*  for (String ss : list) {

              context.write(key, newText(ss.toString()+"--"+sb.toString()));

           }*/

           context.write(key, new Text(list.toString()+"-->"+sb.toString()));

       }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值