2

2 つのデータセットがあります。

Dataset1:

Emp1 Emp2 Salary



Dataset2

Emp add1 add2 add3

データセット 2 のデータは、データセット 1 の Emp1 または Emp2 に存在するすべての従業員で構成されています。

結果のデータセットには、従業員 emp1 と emp2 の両方の Dataset1 と add1 add2 add3 変数の各行が必要です。

Dataset3

Emp1 Emp2 add1(emp1) add2(emp1)  add3(emp1) add1(emp2) add2(emp2)  add3(emp2)

これは基本的に 2 つのデータセットのマージですが、最初のデータセットからキーを取得しようとすると、列で Emp1 Emp2 を取得でき、別の列で Emp1 Emp3 を取得できます。キーが混乱しているため、map reduce を使用してこれを達成するにはどうすればよいですか?

4

1 に答える 1

0

「Merge MR Job」を実現したい場合は、マージされるデータレコードが同じ に到達するように注意する必要がありますReducer。したがって、Mappersこれらの単一のレコード (別名 Key-Value-Pairs) を適切なKey. 独自のキー クラスを実装することをお勧めします

キーは「TwoEmployees」または「EmployeePair」などの名前にすることができます。いずれの場合も MR キーとして機能するには、WritableComparableを実装する必要があります。emp1次に、との 2 つのフィールドが必要emp2です。

Dataset1 のマッパーは、キーに両方の従業員が含まれ、値に給与が含まれるキーと値のペアを発行します。
Dataset2 のマッパーは、emp1 のみがキーに設定され、値がすべてのアドレス情報を保持する複合オブジェクトであるキーと値のペアを発行します。

これらの異なるキーと値のペアを同じレデューサーに送る魔法は、("A. Anderson", "B. Bakeman") が ("B. Bakeman") と等しくなるようにクラスにメソッドを実装することですcompareTo()key、null) と等しい ("A. Anderson", null)。

レデューサーは、dataset1 から 1 つのレコードを受け取り、dataset2 から 2 つのレコードを受け取ります。マージされたレコードを最終的なキーと値のペアとして発行できます。

于 2013-07-15T09:33:42.857 に答える