私はJavaとHadoopの両方が初めてです。頻繁なペアを取得するための非常に単純なプログラムを試しています。
例えば
Input: My name is Foo. Foo is student.
Intermediate Output:
Map:
(my, name): 1
(name ,is): 1
(is, Foo): 2 // (is, Foo) = (Foo, is)
(is, student)
したがって、最終的に頻繁なペアは になり(is ,Foo)
ます。
擬似コードは次のようになります。
Map(Key: line_num, value: line)
words = split_words(line)
for each w in words:
for each neighbor x:
emit((w, x)), 1)
ここで私の鍵は 1 つではなく、ペアです。ドキュメントを読みながら、新しいキーごとにWritableComparableを実装する必要があることを読みました。
だから私はそれについて混乱しています。誰かがこのクラスについて説明できれば、それは素晴らしいことです. それが本当かどうかはわかりません。そうすれば、私は自分でそれを行う方法を見つけ出すことができます!
マッパーも何もコードも必要ありません...この WritableComparable が何をするのかを理解したいだけですか? 実際にキーを比較する WritableComparable のメソッドはどれですか? equals と compareTo はわかりますが、それについての説明が見つかりません。ノーコードでお願いします!ありがとう
EDIT 1:compareToでは、ペア(a、b)=(b、a)に対して0を返しますが、それでも同じリデューサーにはなりません。compareToメソッドにキー(b、a)を(a、b)にリセットする方法はありますか)またはまったく新しいキーを生成しますか?
編集 2: 新しいキーの生成についてはわかりませんが、compareTo の変更ロジックでは、正常に機能しました ..! みんな、ありがとう!