1

次の問題があります。キーと値のペアの形式で大量のデータがあります。キーは ID で、値はテキストです。そして、私の目的は、テキストの断片が何らかの形で「類似」しているクラスター内のオブジェクトをグループ化することです。したがって、テキスト部分をキーとして、id を値として取得する場合、MapReduce のタスクのように見えます。しかし、そのようなキーは従来の MapReduce の使用方法ではありません。また、MapReduces フレームワークの内部実装についてよく知らないため、この方法が機能するかどうかはわかりません。だから私のアイデアの詳細は次のとおりです。レベンスタイン距離比較など) 4.

MapReduce はそのように機能しますか?

4

2 に答える 2

3

GridGain では、テキスト キーを分割されたデータ グリッドに格納することで、これを簡単に解決できます。GridGain Data Grid は、キーに基づいてクラスター全体でデータ セットを自動的に分割するため、標準の Java hashCode() と equals() を適切に実装する同様のテキスト部分がある限り、問題ありません。

また、GridGain でアフィニティ ベースの MapReduce タスクを送信して、ジョブがデータと同じノードで終了することを確認し、今後データに対して何らかの計算を実行する必要がある場合に冗長なデータ移動を回避することもできます。これは、GridProjection.affinityRun(...) メソッドを実行することで実現できます。

于 2012-08-04T13:06:54.853 に答える
0
  1. map フェーズの直後に、その出力は Partitioner (デフォルトでは HashPartitioner ですが、独自の Parititioner を提供できます) を使用して分割されます。TextKey は LSH hashCode を実装して、同様の Text 値が同じパーティションに移動する可能性が高いようにする必要があります。

  2. キーが Strings/Text オブジェクトの場合、デフォルトのソーターは機能しますが、説明したシナリオを考えると、これは結果に影響を与えないと思います。

  3. 問題は、パーティション内の各グループを単一の reduce 呼び出しに渡す Grouper にあります。デフォルトでは、このグルーパーは、この時点でソートされたパーティションを繰り返し処理し、等しい値からグループを形成します。あなたの場合、グループ化が平等ではなく類似性によって行われていることを確認する必要があります。そのため、TextKey もcompareTo()メソッドを実装し、LSH hashCode が同じ場合は 0 を返すように注意する必要があります。

結論として、デフォルトのデータ パス (つまり、デフォルトの Partitioner、Sorter、Grouper) を使用できますが、TextKey (WritableComparable を実装する必要があります) はメソッドhashCode()compareTo()メソッドで魔法を実行する必要があります。

于 2012-08-04T11:03:41.133 に答える