我注意到 Mapper.class 可以用作阶段中的真正映射器,以及用户定义的 reducer。例如,
Phase 1:
Mapper.class -> WordCountReduce.class
这将起作用。但是,Reducer.class 不能以相同的方式使用。即类似
Phase 2:
WordReadMap.class -> Reducer.class
不管用。
这是为什么?
我不明白为什么只要输出与输入属于同一类,它就不会。新 API 中的默认值只是写出您传递给它的任何内容,它被实现为
@SuppressWarnings("unchecked")
protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
) throws IOException, InterruptedException {
for(VALUEIN value: values) {
context.write((KEYOUT) key, (VALUEOUT) value);
}
}
对于旧的 API,它是一个interface
,你不能直接实例化一个接口。如果您正在使用它,那么这就是它失败的原因。再说一次,这Mapper
也是一个接口,你不应该实例化它......