3

巨大なファイル (ASCII 文字のみを含む) があり、最も頻繁に表示される文字を見つける必要があります。

私のアプローチ:

  1. ファイルを分割し、多数の処理ノードに配布します。
  2. 各ノードは文字をカウントし、文字カウント配列 [256] を生成します。
  3. 親ノードは、すべてのノードからすべてのカウント配列を受け取り、最も頻繁に使用される文字を計算します。

しかし、ノードがカウント配列全体を転送して、最も頻繁に使用される文字を計算する必要があるかどうか疑問に思っていますか? ノード間で転送される処理済みデータの量を減らす方法はありますか。

注: 私は分散プログラミングに慣れていないので、基本的なテクニックに慣れようとしています。

4

2 に答える 2

4

たとえば 1 MiB を各ノードに処理させる場合、1 KiB の応答 (256 x 4 バイトint) は無視できます。

ところで、 、特にを見てください。map-reduceの「hello world」はワードカウントです - 探しているものとほとんど同じです。

于 2013-02-07T19:54:24.660 に答える
1

最も頻繁に使用される文字の正確な数を知りたい場合は、はい、各ノードがすべてのカウントを返す必要があります。1 つのノードが 100 万の「a」をカウントし、別のノードが 1 つのインスタンスのみをカウントする可能性があります。正確な合計を取得するには、すべてのカウントが必要です。

また(無関係)、ポイント1は、「ファイルを分割して配布する」と述べています。これは、1 台のマシンで読み取り、ネットワーク経由で送信することを意味しますか? この場合、すでにファイルの一部をメモリに読み込んでいるので、キャッシュ内でまだウォーム状態である間に、すぐにスキャンすることもできます。もちろん、ファイルを事前に配布した場合、これは問題になりません。

于 2013-02-08T06:02:23.303 に答える