永发信息网

hadoop Reducer文件输出格式

答案:1  悬赏:40  手机版
解决时间 2021-02-06 06:41
  • 提问者网友:聂風
  • 2021-02-05 14:16
hadoop Reducer文件输出格式
最佳答案
  • 五星知识达人网友:妄饮晩冬酒
  • 2021-02-05 15:50
map中输出key相同,在reduce阶段会把map中的value做combin

代码 context.write(257,1); 改成 context.write(43,"257:1");
最后输出格式就是43 257:1 262:1 1927:2 1032:1 13:1 14:1 17:1 23:1 6041:1 5403:1 986:1 4126:1 674:1 164:1 134:2 687:2 50:5 51:2 4148:1 8886:1 3130:1 9150:1 2112:1 3905:1 1602:1 865:2 98:2 718:1 466:1 1876:1 345:1 90:1 7027:2 314:1 1889:1 2146:1 357:1 2024:1 5101:1 1646:1 104:2 371:1 2934:17 5829:1 4040:1 2891:1 14:1 1783:1 381:1 2693:1追问这样应该不行的。比如处理这种文件:
257 1
262 1

1927 2
按照你的思路会输出这种形式:
43 257:1
43 262:1
43 1927:2
而我要的结果是:
3 257:1 262:1 1927:2
前面的3是表示一共有3个键值对。能不能设置OutputFormat类里面有个什么函数,或者写个继承类什么的实现一下啊?刚刚学MapReducer,求教,谢谢!追答OutputFormat是个抽象类,TextOutputFormat继承了OutputFormat,默认一行行输出,你想自己实现非一行行输出,重写TextOutputFormat。本身mapreduce的map 结束后,会把数据重新排序,作为reduce阶段的输入,该过程称之为shuffle(shuffle也就使你要的功能!!)也就是把相同key的value 拼接在一起

257 1
262 1
1927 2

key 257:1 262:1 1927:2
原理的东西不想多讨论

你要把键值对个数做为输出格式的key,本身你数据格式就是一行行的,而继承InputFormat的TextInputFormat也是一行行读取的,想拿到所有键值对个数,需要完成整个map过程,所以你想要的那个“3”一遍mapreduce做不到,需两次,除非自己重写TextInputFormat。

没有必要就不要用mapreduce。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯