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的上下文中“混淆”是什么意思!?