0
  1. マッパー内のセットアップ、マップ、実行、クリーンアップに同じコンテキストが渡されますか?
  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については、Javadocが示唆しているように、runメソッドをオーバーライドしてより多くの制御を行うことができます:

エキスパート ユーザーは、Mapper の実行をより完全に制御するために、このメソッドをオーバーライドできます。

また、コンテキストのためにメンバー フィールドを保持する必要はないかもしれませんが、できることは確かです。

また、オブジェクトは同じですが、そのプロパティの値は、別のメソッド (セットアップ、マップ、またはクリーンアップ) に渡されたときとは異なる状態になるメソッドのいずれかで設定または設定解除できます。

于 2013-04-11T08:37:18.817 に答える
1

Mapper.Contextのドキュメントは次のとおりです。特定のジョブの場合、属性の一部getJobID()は同じままですが、属性の一部はgetInputSplit()同じジョブ内のマップ間で異なる場合があります。

于 2013-04-11T03:14:18.073 に答える