2

カスタム パーティショナー (またはデフォルトの HashPartitioner) 内のキーとその値に関する情報を取得したいと考えています。

「コンテキスト」変数にアクセスすることで、マッパーとリデューサーの両方でカスタム カウンターを使用できます。ただし、Partitioner 内では「context」変数にアクセスできません。

-1- パーティショナーから「コンテキスト」変数へのアクセスを取得する方法はありますか? または -2- パーティショナーにカウンターを追加する方法は?

ありがとうございました。

4

2 に答える 2

1

パーティショナーを通過するすべてのキーと値のペアは、(1) マッパーによってコンテキストに書き込まれたか、(2) レデューサーの reduce() メソッドに渡されます。これら 2 つの場所のいずれかにコードを配置して、カスタム カウンターを記述し、コンテキストにインクリメントすることができます。

パーティショナーにコードを記述する必要がある場合は、パーティショナーに JobConfigurable を実装してみてください。これにより、パーティショナーが最初にインスタンス化されるときに、hadoop が JobConf オブジェクトを使用してパーティショナーを呼び出す必要があります。構成に情報 (情報を出力するシーケンシャル ファイルまたはテキスト ファイルの名前など) を入れて、この方法でパーティショナーに渡すことができます。

于 2013-04-16T19:38:00.357 に答える
0

パーティショナーでコンテキスト (および結果としてカウンター) にアクセスする方法はありません。

Chris Gerkenが提案するようにマッパーにロジックを追加できない理由はわかりませんが、同様の/代替アプローチは、Mapper.Contextラッピングクラスを作成してから実際のマップメソッドに委任するマップラッパークラスを作成することですこのラップされたコンテキストを使用して目的の Mapper クラスを作成すると、context.write メソッドの呼び出しをインターセプトして、必要なことを実行できます。ただし、マッパー コードを更新することと実際には違いはありません。

于 2013-04-16T23:56:08.837 に答える