分享

MapReduce初级案例(3):使用MapReduce实现平均成绩

hyj 发表于 2014-3-3 22:25:51 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 31 108332
提示: 作者被禁止或删除 内容自动屏蔽

已有(33)人评论

跳转到指定楼层
nettman 发表于 2014-3-3 22:57:48
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

pig2 发表于 2014-3-4 09:47:55
上面涉及到Iterator,这里需要补充一下

迭代器(Iterator)

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

迭代器应用:
list l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
for (Iterator iter = l.iterator(); iter.hasNext();) {
  String str = (String)iter.next();
  System.out.println(str);
}
/*迭代器用于while循环
Iterator iter = l.iterator();
while(iter.hasNext()){
  String str = (String) iter.next();
  System.out.println(str);
}
*/

回复

使用道具 举报

472827074@qq.co 发表于 2014-4-14 13:59:51
顶起来顶起来顶起来顶起来顶起来
回复

使用道具 举报

hadoop求索 发表于 2014-4-26 10:17:56
在写map的过程中,hadoop默认的以行读取数据,楼主这里没有必要按行分割把?
回复

使用道具 举报

mehao 发表于 2014-6-25 16:56:13
有问题,楼主,帮忙解答一下,就是你上面的例子,上面是输入文件是三个,分别存放着不同科目的学生的成绩,问题是当用一个文件作为输入,将学生的多科目多成绩存进去,简而言之就是之前的三个文件合并成一个文件作为输入时,输出的时候,显示的结果就有问题,,,,这是为什么????
回复

使用道具 举报

howtodown 发表于 2014-6-25 17:09:36
mehao 发表于 2014-6-25 16:56
有问题,楼主,帮忙解答一下,就是你上面的例子,上面是输入文件是三个,分别存放着不同科目的学生的成绩, ...

这个程序的逻辑是按照不同科目,文件不同来设计的。如果你一旦合并,程序没有改变,还是按照原先的逻辑,所以肯定会不一样的。
回复

使用道具 举报

mehao 发表于 2014-6-26 10:43:30
本帖最后由 howtodown 于 2014-6-26 13:02 编辑
howtodown 发表于 2014-6-25 17:09
这个程序的逻辑是按照不同科目,文件不同来设计的。如果你一旦合并,程序没有改变,还是按照原先的逻辑, ...

这个例子不是测试平均值的吗;我求某个人的成绩的平均分,这个时候,我的目的很简单,只想知道某个人的平均分是多少,我不管它是哪个科目,从上述写的程序也符合要求,最后同样输出的也是某个人的平均分,这和不同科目之间没有关系吧。
貌似不是这样的吧,不妨做个测试:测试一:以一个编码格式为ANSI的txt文件,里面存放有 如图所示,将此文件作为 input 输入文件,进行MR求平均值,结束后查看output内容,结果显示平均值均正确;

测试二:以一个 编码格式为utf-8的txt文件,里面存放有数据(和【测试一】一样的内容),将北文件作为intput输入文件,和【测试一】一样的测试步骤运行MR程序,结束后,查看output内容,结果显示错误;

这是为什么?是不是说由于编码的影响导致 文件内容map切数据时,不能合并,如上图中的,字符C,在map中,存在两个key值,导致给reduce的时候合并最后输出就是两个C,对应两个value值;请高手帮帮忙指导下??刚学不怎么懂;谢谢了

编码格式为ansi的txt

编码格式为ansi的txt


回复

使用道具 举报

howtodown 发表于 2014-6-26 13:09:39
mehao 发表于 2014-6-26 10:43
这个例子不是测试平均值的吗;我求某个人的成绩的平均分,这个时候,我的目的很简单,只想知道某个人的平 ...
我不管它是哪个科目,从上述写的程序也符合要求,最后同样输出的也是某个人的平均分,这和不同科目之间没有关系吧。
这个有关系,建议你先实践,然后在讨论问题。一个人的平均成绩:总成绩/科目,你只有总成绩,没有科目,就不会有平均成绩。

回复

使用道具 举报

hyj 发表于 2014-6-26 13:17:22
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条