Hadoop MapReduce - 求和和按值排序



我的一个朋友在hadoop上被问到这个问题 MapReduce—— 我们有多家商店,每家商店都有很多顾客访问和购买东西。 数据集由"商店#、客户#、购买数量"组成。需要一个MapReduce代码来获取每个商店的前2个客户。

我想到的解决方案是对 qty 进行二次排序(按降序 - store + qty 制作复合键),并在化简器中仅显示每个键的前 2 个值(或客户)(存储 + 数量,qty 是复合键的一部分)。如果客户是唯一的,这有效,但如果客户多次访问同一家商店,那么我们该怎么做?

解决方案是遍历每个值,为每个客户添加数量,在减速器中按数量排序。这意味着我将重新执行排序逻辑,并且不确定我是否可以使用 TreeMap/Hashmap 等,因为可能存在内存限制。

或者解决方案是编写 2 个 MapRed,一个接一个地运行。第一个获得为每个客户和商店购买的数量总和。第二个按数量排序并获得前 2 名买家的 MapRed。

还有其他方法可以实现这一目标吗?还要考虑内存限制?

尝试将复合键作为客户+商店,然后使用Reducer和Map Reduce框架对它们进行分组和计数

相关内容

  • 没有找到相关文章

最新更新