Hadoop 与Map-Reduce合并。一个数据集中有多个键

Hadoop 与Map-Reduce合并。一个数据集中有多个键,hadoop,merge,mapreduce,hadoop-streaming,Hadoop,Merge,Mapreduce,Hadoop Streaming,我有两个数据集: 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)

我有两个数据集:

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实现这一点?

如果你想实现“合并MR作业”,你必须注意将要合并的数据记录到达相同的
Reducer
。因此,您的
映射程序
必须使用适当的
发出这些单记录(也称为键值对)。我建议您

您的密钥可以命名为“TwoEmployees”或“EmployeePair”等等。在任何情况下,要作为MR密钥工作,它必须实现。然后它应该有两个字段
emp1
emp2

Dataset1的映射器将发出键值对,其中键值包含两个雇员,值包含薪水。
Dataset2的映射器将发出键值对,其中只有emp1设置在键中,并且该值是一个包含所有地址信息的复杂对象

现在,让这些不同的键值对进入同一个减缩器的魔法是
key
类中实现
compareTo()
-方法,方法是(“a.Anderson”,“B.Bakeman”)等于(“B.Bakeman”,null),也等于(“a.Anderson,null”)


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

您可以执行两轮MapReduce吗?在第一轮中,只需处理emp1。在第二轮中,完成emp2。我不知道我是否理解正确,但基本上,您有数据集1,其中包含员工及其工资的列表;包含所有员工增量的数据集2?你想要达到的是获得“每位员工的最终工资”?你能在你的数据集1、数据集2和数据集3中添加更多的行,告诉我们Hadoop是如何与键混淆的吗?我不明白在MR keys的上下文中“混淆”是什么意思!?