与Map Reduce合并.一个数据集中有多个键



我有两个数据集:

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密钥。那么它应该有两个字段emp1emp2

数据集1的映射器将发出键值对,其中键包含雇员,值包含工资。
Dataset2的Mappers将发出键值对,其中键中只设置了emp1,该值是一个携带所有地址信息的复杂对象。

现在,让这些不同的键值对进入同一个reducer的神奇之处在于key类中实现compareTo()-方法,方法是("a.Anderson","B.Bakeman")等于("B.Bake曼",null),也等于("a.安德森",null")。

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

相关内容

  • 没有找到相关文章

最新更新