与map reduce合并一个数据集中有多个键

9cbw7uwe  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(375)

我有两个数据集:

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来实现这一点,因为这些键变得混乱了?

rn0zuynd

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接收两条记录。它可以将合并的记录作为最终的键值对发出。

相关问题