0

Mapper.class は、ユーザー定義のレデューサーと共に、フェーズで実際のマッパーとして使用できることに気付きました。例えば、

Phase 1:
Mapper.class ->  WordCountReduce.class

これは機能します。ただし、Reducer.class を同じように使用することはできません。つまり、次のようなもの

Phase 2:
WordReadMap.class ->  Reducer.class

動作しないでしょう。

何故ですか?

4

1 に答える 1

1

出力が入力と同じクラスである限り、なぜそうならないのかわかりません。新しい APIのデフォルトは、渡されたものをそのまま書き出すだけで、次のように実装されています。

@SuppressWarnings("unchecked")
protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
                       ) throws IOException, InterruptedException {
    for(VALUEIN value: values) {
      context.write((KEYOUT) key, (VALUEOUT) value);
    }
}

古い API の場合、これはinterfaceであり、インターフェースを直接インスタンス化することはできません。それを使用している場合、それが失敗の理由です。繰り返しMapperますが、これもインターフェイスであり、インスタンス化できないはずです...

于 2012-10-31T17:33:27.410 に答える