我的一位朋友在hadoop MapReduce上被问到这个问题 - 我们有多家商店,每家商店都有很多顾客来访和购买东西。数据集由“Store#,Customer#,Quantity purchase”组成。需要MapReduce代码才能获得每个商店的前2名客户。
我想到的解决方案是在qty上进行二次排序(按降序排列 - store + qty使复合键),在reducer中只显示每个Key的前2个值(或者客户)(store + qty) ,qty是复合键的一部分)。如果客户是唯一的,但是如果客户多次访问同一家商店,那么这是有效的吗?
解决方案是循环遍历每个值,为每个客户添加数量,在reducer中按数量排序。这意味着我将重新进行排序逻辑,并且不确定我是否可以使用TreeMap / Hashmap等,因为可能存在内存限制。
或解决方案是编写2个MapRed,它一个接一个地运行。第一个获得为每个客户和商店购买的数量的总和。第二个MapRed按数量排序并获得前2名买家。
实现这一目标的其他任何方式?还考虑内存限制?
答案 0 :(得分:0)
尝试使用复合键作为客户+存储,然后使用reducer和map reduce框架,对它们进行分组并计数