我有两个数据集:
Dataset1:
Emp1 Emp2 Salary
Dataset2
Emp add1 add2 add3
数据集2中的数据由数据集1中Emp1或Emp2中存在的所有员工组成。
生成的数据集需要每行都有employess emp1和emp2的Dataset1和add1 add2 add3变量。
Dataset3
Emp1 Emp2 add1(emp1) add2(emp1) add3(emp1) add1(emp2) add2(emp2) add3(emp2)
它基本上是对两个数据集的合并,但当我尝试从第一个数据集获取密钥时,我可以在一列中获得Emp1-Emp2,也可以在另一列中获取Emp1-Emp3。既然关键点混淆了,我该如何使用map reduce来实现这一点?
如果您想实现"Merge MR Job",您必须确保要合并的数据记录到达相同的Reducer
。因此,您的Mappers
必须使用适当的Key
来发出这些单个记录(也称为键值对)。我建议实现您自己的密钥类
您的密钥可以命名为"TwoEmployees"或"EmployeePair"左右。在任何情况下,都必须实现WritableComparable才能用作MR密钥。那么它应该有两个字段emp1
和emp2
。
数据集1的映射器将发出键值对,其中键包含雇员,值包含工资。
Dataset2的Mappers将发出键值对,其中键中只设置了emp1,该值是一个携带所有地址信息的复杂对象。
现在,让这些不同的键值对进入同一个reducer的神奇之处在于在key
类中实现compareTo()
-方法,方法是("a.Anderson","B.Bakeman")等于("B.Bake曼",null),也等于("a.安德森",null")。
现在,您的reducer将从dataset1接收一条记录,从dataset2接收两条记录。它可以将合并后的记录作为最终键值对发出。