我的问题是:
在hadoop mapreduce中,对于每个中间键,每个reducer任务都可以发出,每个键只有一个最终的键值对。还是程序员想要的多少?
答案 0 :(得分:1)
这里有两点:
例如,
public static class Reduce extends Reducer {
contex.write(new Text(" key1"),new LongWritable(4));
conte.write(new LongWritable(1),new Text(" value")); - 这行会给你一个编译时错误。
键必须是Text类型,Value必须是LongWritable类型。
答案 1 :(得分:0)
假设您的密钥是LongWritable,值为Text。然后在reducer中你希望获得相同键的许多Text值,并且你可能希望在一行中写下这些值中的每一个:
for (Text value : values) {
context.write(key,value)
}
答案 2 :(得分:0)
尽可能多的程序员想要的,唯一的约束是所有键的类型和值应该相同。只要您使用Writable,MapReduce就不会限制您使用键和值 所以对于特定的密钥
for (Text value : values) {
context.write(key,value)
}
和
for(int i=0; i < 10000 ; i++){
context.write(key, new Text(String.valueOf(i)));
//context.write(new Text("MyRandomKey"), new Text(String.valueOf(i)));
}
考虑到您已将键和值定义为reducer中的文本
,这两个都很好