分享

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

hyj 发表于 2014-3-3 22:25:51 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 31 108000
mehao 发表于 2014-6-26 13:49:38
hyj 发表于 2014-6-26 13:17
小伙子,研究的很深,字符的变动,可能会引起内容的变化,至于会不会造成切分成功,你的前后两个帖子不一 ...

前后是同一个问题,这个例子是算学生的平均成绩值的,例子中,如果把成绩按三个科目来分成三个文件作为输入(这三个文件编码格式都是utf-8),里面存的学生姓名不得重复,输出的结果就是正确的,但是这个例子,算的是学生成绩,即使我把学生和各科成线都放在同一文件中来作为输入的话,理论上,结果也会是,【学生  平均成绩】,这样输出才是正确的,为了验证这个进行测试,以英文字符存放的且文件编码格式是默认的ansi,运行结果是正确的,但把格式改成utf-8,运行的结果是错误的。有一个是重复了,就是在reduce在合并的时候,把同一个英文字符误认为两个字符,导致其合并的结果就是两个原样输出,而未进行合并;不明白前后有什么区别……
回复

使用道具 举报

mehao 发表于 2014-6-26 13:59:34
我进行测试了啊,这里的话和科目就没有关系了,如果你把它放到同个文件里,相当于是一个人就有三个成绩,分别是同一个学生,三条记录,,在合并时就按一个人来合并,数目就是3,这结果肯定是对的,是可以输出出来的,不信你可以做这个测试,默认编码格式为ansi的txt文件,这里不要改编码格式,然后你在里面输入
A 65
A 78
B 89
B 87
C 78
C 56
以这个文件作为input,输入,再执行该程序看看结果,结果肯定是正确的,可以试一试来验证一下呀,我实践过的,测试过的,等你回复!!!
回复

使用道具 举报

hyj 发表于 2014-6-26 21:09:28
mehao 发表于 2014-6-26 13:59
我进行测试了啊,这里的话和科目就没有关系了,如果你把它放到同个文件里,相当于是一个人就有三个成绩,分 ...

把同一个英文字符误认为两个字符,导致其合并的结果就是两个原样输出,而未进行合并;

原因你不是已经找到了吗?
回复

使用道具 举报

mehao 发表于 2014-6-27 18:36:59
hyj 发表于 2014-6-26 21:09
原因你不是已经找到了吗?

是这个原因,这是由于使用txt文件保存utf-8编码格式时,默认是存在BOM的,当程序在读这个BOM时,内容头会多出三个字符,在MR切的时候,就会连中这个和第一个有效值连在一起当成一个KEY,所以就导致输出结果有问题,当保存文件为无BOM的UTF-8时,运行结果正确;而并不是像楼上那位大哥说的,”科目不能放同一文件,要放同一文件要重设计 “,而是输入的文件保存的格式问题,本身程序无问题;
回复

使用道具 举报

x5136160 发表于 2014-7-15 20:20:05
很好很好,了解了解。。。
回复

使用道具 举报

chendada 发表于 2014-8-25 11:03:13
我问一下,那个结果里赵六怎么在张三前面啊?
zhao不是应该在zhang后面吗?
还有我抄了一遍程序运行后四个人的顺序是
张三 李四 王五 赵六
怎么没有排序啊?
回复

使用道具 举报

pig2 发表于 2014-8-25 11:53:58
chendada 发表于 2014-8-25 11:03
我问一下,那个结果里赵六怎么在张三前面啊?
zhao不是应该在zhang后面吗?
还有我抄了一遍程序运行后四 ...
这是求平均成绩的,排序可以参考这个
MapReduce初级案例(2):使用MapReduce数据排序

回复

使用道具 举报

chendada 发表于 2014-8-26 11:02:16
pig2 发表于 2014-8-25 11:53
这是求平均成绩的,排序可以参考这个
MapReduce初级案例(2):使用MapReduce数据排序

我理解的是
“经过shuffle后,在求平均值的时候,key值已经排好序了。
所以求完平均值,输出的时候应该也是按key值排好序输出的。“
我理解的对不?
按我理解的应该输出 ‘李四 90 \n王五 82\n张三 82\n赵六 76\n’。
可我的输出是‘张三 82\n李四 90\n王五 82\n赵六 76\n’。
楼主结果的截图和我想的结果不同,和我算出的结果也不同。
咋回事啊?是正常现象吗?


回复

使用道具 举报

yizuoming 发表于 2014-9-4 00:06:10
谢谢分享,受教了
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条