我有两个数据集:
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来实现这一点,因为这些键变得混乱了?
1条答案
按热度按时间rn0zuynd1#
如果你想实现一个“合并mr作业”,你必须注意要合并的数据记录到达相同的位置
Reducer
. 因此你的Mappers
必须用适当的Key
. 我建议您实现自己的密钥类。您的密钥可以命名为“twoemployees”或“employeepair”等。在任何情况下,要作为mr密钥工作,它都必须实现可写性。那么它应该有两个字段
emp1
以及emp2
.dataset1的Map器将发出键值对,其中键值同时包含employees和salary。
dataset2的Map器将发出键值对,其中只有emp1被设置在键值中,并且该值是一个包含所有地址信息的复杂对象。
现在,让这些不同的键值对转到同一个reducer的神奇之处在于实现
compareTo()
-中的方法key
以一种“a。安德森,“b。巴克曼“)等于(“b。bakeman“,null)也等于(“a。安德森”,空)。现在,您的reducer将从dataset1接收一条记录,从dataset2接收两条记录。它可以将合并的记录作为最终的键值对发出。