0
  1. 是否将相同的上下文传递给 Mapper 中的设置、映射、运行、清理?
  2. 会有不一样的情况吗?
  3. 您可以将上下文作为设置中的成员字段吗?

映射器

4

2 回答 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 回答