在Hadoop map-reduce中对连接的数据进行分组

时间:2014-03-06 19:54:47

标签: java join hadoop mapreduce

我有两种不同类型的文件,一种是用户列表。它有以下结构: 的用户ID,姓名,CountryID

第二种是订单清单: 的订单ID,用户ID,OrderSum

每个用户都有很多订单。我需要编写map-reduce hadoop job(在java中)并接收具有以下结构的输出: 的 CountryID,NumOfUsers,MinOrder,MaxOrder

对于我来说,编写两个不同的映射器(对于每种文件类型)和一个reducer以便通过UserID连接来自两个文件的数据并不是问题,并且接收以下结构: 的用户ID,CountryID,UsersMinOrder,UsersMaxOrder

但我不明白我如何按 CountryID 分组数据?

1 个答案:

答案 0 :(得分:0)

我建议通过Pig或Hive运行它,因为你可以用几行来解决这种问题。

如果做不到,我会做以下事情。在已连接的数据上运行另一个MapReduce作业,并执行以下操作:在映射器中,对于每个输入拆分,保留每个国家/地区ID处理的最小订单,最大订单和元组数(具有唯一用户ID的行)的选项卡。只有少数国家/地区,因此您可以在整个地图工作中将这些统计信息保存在内存中。在拆分结束时,将累计统计数据输出到按国家/地区ID键入的reducer。然后,reducer简单地组合来自每个分割的聚合数据,以找到全局最大值,最小值和计数。