3

単語間の共起類似度を計算するために Hadoop を使用しています。次のような共起単語のペアで構成されるファイルがあります。

a b
a c
b c
b d

私は単語をノードとして扱うグラフベースのアプローチを使用しており、共起する単語はそれらの間にエッジがあります。私のアルゴリズムは、すべてのノードの次数を計算する必要があります。Map-Reduce以下を出力する合計学位を計算するジョブを正常に作成しました。

a 2
b 3
c 2
d 1

現在、出力はファイルに書き戻されますが、代わりに、結果をjava.util.HashMap. HashMap次に、これを別のReduceジョブで使用して、最終的な類似度を計算したいと考えています。

ここに私の質問があります:

  1. リデュース ジョブの結果をメモリに取り込むことはできますか ( ListMap)。もしそうなら、どのように?
  2. これは最善のアプローチですか?そうでない場合、これにどのように対処すればよいですか?
4

1 に答える 1

1

2 つの可能性があります。または、分散ファイル システムからマップ/リデュース タスクのデータを読み取ります。または、分散キャッシュに直接追加します。分散キャッシュのサイズをグーグルで調べたところ、制御できます。

「local.cache.size パラメータは、DistributedCache のサイズを制御します。デフォルトでは、10 GB に設定されています。」

Cloudera ブログへのリンク

したがって、最初のジョブの出力を 2 番目のジョブの分散キャッシュに追加すれば、問題ないと思います。何万ものエントリは、ギガバイトの範囲には遠く及びません。

分散キャッシュにファイルを追加する手順は次のとおりです。

マッパーで読むには:

Path[] uris = DistributedCache.getLocalCacheFiles(context.getConfiguration());
String patternsFile = uris[0].toString();
BufferedReader in = new BufferedReader(new FileReader(patternsFile));

DBCacheに追加するには:

DistributedCache.addCacheFile(new URI(file), job.getConfiguration());

あなたの2番目の仕事を設定している間。

これでうまくいくかどうか教えてください。

于 2013-10-01T12:03:31.817 に答える