hadoopMapreduce中的java分组连接数据

z9gpfhce  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(366)

我有两种不同类型的文件,一种是用户列表。它有以下结构:userid、name、countryid
第二种类型是orders列表:orderid,userid,ordersum
每个用户都有很多订单。我需要编写map reduce hadoop job(用java)并用以下结构接收输出:countryid、numofusers、minorder、maxorder
对我来说,编写两个不同的Map器(针对每种文件类型)和一个缩减器,以便按userid连接两个文件中的数据,并接收以下结构不是问题:userid、countryid、usersminoder、usersmaxorder
但我不明白如何按countryid对数据进行分组?

avwztpqn

avwztpqn1#

我建议你在Pig或Hive中运行,因为你只需要几行就可以解决这类问题。
如果做不到这一点,我会做以下事情。对加入的数据运行另一个mapreduce作业,并执行以下操作:在Map器中,对于每个输入拆分,对每个国家/地区id处理的最小顺序、最大顺序和元组数(具有唯一用户id的行)保留选项卡。只有少数国家/地区,因此可以在整个Map作业中将这些统计信息保留在内存中。在分割结束时,将累积的统计数据输出到按国家id键控的reducer。然后reducer简单地组合来自每个分割的聚合数据,以找到全局最大值、最小值和计数。

相关问题