- 是否将相同的上下文传递给 Mapper 中的设置、映射、运行、清理?
- 会有不一样的情况吗?
- 您可以将上下文作为设置中的成员字段吗?
问问题
282 次
2 回答
2
是的,在同一个映射器中,它是 , 和 中的同一个上下文对象。setup()
map()
cleanup()
如您所见,这些方法是从 调用的run()
,该方法如下所示:
public void run(Context context) throws IOException, InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}
这应该回答您的第 1 点和第 2 点,对于第 3 点,您可以重写 run 方法以获得更多控制权,因为它是 Javadoc 建议的:
专家用户可以覆盖此方法,以更完整地控制 Mapper 的执行。
也许您不需要为上下文保留成员字段,但可以肯定。
此外,虽然对象相同,但它的属性值可以在任何方法中设置或取消设置,使其处于与传递给另一个方法(设置、映射或清理)时不同的状态。
于 2013-04-11T08:37:18.817 回答
1
这是Mapper.Context的文档。给定一个特定的工作,一些属性 likegetJobID()
保持不变,而一些属性 likegetInputSplit()
可能在同一个工作的不同地图中不同。
于 2013-04-11T03:14:18.073 回答