2

通常、Hadoop の例では、1 つまたは複数のファイルのワード カウントを行う方法が定義されています。ワード カウントの結果は、セット全体から取得されます。

各段落のワードカウントを行い、 paragh(i)_wordcnt.txt のような個別のファイルに保存したいと考えています。

どうやってするの?(問題は、マッパーがセット全体に対して実行され、リデューサーが最終的に出力を収集することです!

特定のマークに到達したら結果を書くなどのことはできますか! ) filecontent の場合:

para1
...
para2
...
para3
...

para2がpara1のwordcountの結果を書き込むのを見て、私は好きですか?または、別の方法で各パラを別々のファイルに書き込む場合、このシーケンスのようにする方法

   loop: 
   file(i)(parai)->Mapper->Reducer->multipleOutput(output-file(i))->writetofile(i);
   i++;
   goto loop;
4

2 に答える 2

0

どうすればできるのかという基本的なファンダを書いています。

このプロセスには、リンクされたマッパーとリデューサーを実行する必要があると思います。

最初のマッパーでは、RecordReaderを使用し、そのキーを段落全体として設定する必要があります。このようにして、持っている段落と同じ数のキーを取得します。次に、レデューサーをアイデンティティレデューサーとして使用し、レデューサーの出力を新しいマッパーに渡して、段落をキーとして取得する必要があります。

これで、新しいマッパーに段落ができたので、必要に応じて有名なワード カウント コードを微調整できます (ここで KEYS を VALUES に置き換えるだけで、残りはすべて同じになります)。

レデューサーに mapper をネストしたため、段落の単語数を個別のファイルで取得するのは簡単です。

私の方法が正しくないか教えてください。

于 2013-04-15T10:47:50.017 に答える