2

我有两个数据集:

Dataset1:

Emp1 Emp2 Salary



Dataset2

Emp add1 add2 add3

Dataset 2 中的数据由 dataset1 中 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. 我建议实现你自己的 key class

您的密钥可以命名为“TwoEmployees”或“EmployeePair”左右。在每种情况下,要作为 MR 密钥,它都必须实现WritableComparable。那么它应该有两个字段emp1emp2

Dataset1 的映射器将发出键值对,其中键包含员工,值包含工资。
Dataset2 的 Mappers 将发出键值对,其中仅在键中设置了 emp1,值是携带所有地址信息的复杂对象。

现在让这些不同的键值对进入同一个 reducer的神奇之处在于在类中实现compareTo()key-方法,使 ("A. Anderson", "B. Bakeman") 等于 ("B. Bakeman" , null) 并且也等于 ("A. Anderson", null)。

现在您的 reducer 将从 dataset1 接收一条记录,从 dataset2 接收两条记录。它可以将合并的记录作为最终的键值对发出。

于 2013-07-15T09:33:42.857 回答