我有一个map任务,我在其中覆盖cleanup
函数,如下所示,但IDE显示错误消息“GraphAnonymization.Map_Phase3类型的方法清理(Mapper.Context)必须覆盖或实现超类型方法“
public static class Map_Phase3 extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> {
@Override
public void cleanup(Context context) throws IOException, InterruptedException{
context.write()
...
}
}
旧的Hadoop API中未定义方法cleanup
。我是否必须切换到新的API?
答案 0 :(得分:0)
在旧的API(mapred)中,Mapper接口扩展了Closable接口 - 它定义了close方法(而不是cleanup,它是新mapreduce API映射器的方法)。
因此,请将您的代码修改为以下内容:
public static class Map_Phase3 extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> {
@Override
public void close() {
}
}
旧的API不会传递OutputCollector,您可以写出任何最终值或累积值,因此您需要在映射器的实例变量中缓存传递给map方法的值。最后,您需要在RuntimeException中包装任何异常,因为close方法没有定义任何抛出的异常