分享

求解救

今天自己写mapreduce时,在reduce中遇到一个很纠结的问题,上其中部分代码:        List<MyObj> list=new ArrayList<MyObj>();
        for(MyObj mm:v2){
                                count++;
                                System.out.println("放入list之前time值      "+mm.getTime());
                                list.add(mm);
                               
                        }
        for(MyObj obj:list){
                obj.setCount(new Text(String.valueOf(count)));
                System.out.println("放入list之后time值   "+obj.getTime());
                               
        }
结果是:

放入list之前time值      1.4
放入list之前time值      0.6
放入list之前time值      9.2
放入list之前time值      2.1
放入list之前time值      0.7
放入list之后time值   0.7
放入list之后time值   0.7
放入list之后time值   0.7
放入list之后time值   0.7
放入list之后time值   0.7



结果怎么会这样呢?

已有(7)人评论

跳转到指定楼层
hadoop小象 发表于 2014-6-1 17:49:52
howtodown 发表于 2014-6-1 17:33
for(MyObj mm:v2){
                                count++;
                                System. ...

另一个循环就是遍历那个list的呀
回复

使用道具 举报

howtodown 发表于 2014-6-1 17:33:47
for(MyObj mm:v2){
                                count++;
                                System.out.println("放入list之前time值      "+mm.getTime());
                                list.add(mm);
//这里打印放入后的list的值
                                
                        }另外一个循环,就不清楚了,看看是不是你的逻辑问题。
回复

使用道具 举报

howtodown 发表于 2014-6-1 18:06:08
从你的结果来看,你的数组都被最后一个值给覆盖了
回复

使用道具 举报

hyj 发表于 2014-6-1 18:24:20
我猜你的循环应该是,多次循环了。每走一个数组,你的另外一个数组又跑了一边。导致整个数组,只留下最后一个值。
回复

使用道具 举报

hyj 发表于 2014-6-1 18:27:22
你循环四个估计打印出来的应该是全部2.1

放入list之前time值      1.4
放入list之前time值      0.6
放入list之前time值      9.2
放入list之前time值      2.1

放入list之后time值   2.1
放入list之后time值   2.1
放入list之后time值   2.1
放入list之后time值   2.1
回复

使用道具 举报

hadoop小象 发表于 2014-6-1 20:11:14
hyj 发表于 2014-6-1 18:24
我猜你的循环应该是,多次循环了。每走一个数组,你的另外一个数组又跑了一边。导致整个数组,只留下最后一 ...

没看明白你说啥
回复

使用道具 举报

hyj 发表于 2014-6-1 20:13:34
你循环四个,看看是什么结果。你肯定重复赋值了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条