0

各マップ関数がその入力 (複数の CSV レコードを含むファイル分割) をデータ構造にロードし、行ごとに処理するのではなく、それらを処理するシステムを設計しました。何百万ものレコードを処理するため、複数のマッパーが存在するため、1 つのマッパーは完全に非効率的です。

WordCount の例から、マップ関数が行ごとに読み取られていることがわかります。ほとんどの場合、マップ関数は、受信した分割から各行に対して呼び出されます。このマップへの入力は、一度に 1 行ずつ送信するのではなく、完全な行そのものであるべきだと思います。

Reduce 関数には別のタスクがあります。したがって、マップ機能を微調整して、割り当てられたタスクを実行できると思います。回避策はありますか?

4

1 に答える 1

0

あなたの説明から、マップ入力は単一の行ではなく、複数の行から構築された構造であることがわかります。
この場合、(分割からの) 入力ストリームを YourDataStructure クラスのオブジェクトのシーケンスに変換する独自の InputFormat を作成する必要があります。マッパーはこれらの YourDataStructure オブジェクトを受け入れます。

スクリプト全体が実際に処理したい構造である場合-マッパーのすべてのロジックを1つのトリックで実行することをお勧めします-分割の最後の行がいつあるかを知る必要があります。TextInputFormat を継承し、それを微調整して、最後の行があることを示すことで実行できます。次に、構造をマッパーで 1 行ずつ作成し、最後の行が示されたら - do the job
.

于 2012-11-13T19:24:46.627 に答える