我收到了一个大文本文件。使用来自公司出租车的数据。这些数据在旅行之间进行组织。 示例:
我的hadoop地图缩减计划的目的是以最大的收入金额返还司机。
所以:
现在怎么办?我需要另一个减速机,这样一旦我得到每个司机的收款,我只需要获得收集金额最高的那个。这就是问题所在。
我搜索了stackoverflow,发现两种可能的解决方案:
Sharing a Conf variable through the host包含最多的收款和它的驱动程序(可能是两个)。
Use two jobs.第一个获得每个司机的收款,第二个是获得最大收集金额的司机。
哪个是我问题的最佳选择?还有另一个吗?
答案 0 :(得分:0)
实际上你可以在一个程序中执行此操作。您可以在reducer中维护一个本地比较对象(驱动程序许可证,汇总金额)并将其与当前处理(键,值)进行比较,如果它大于本地对象,则总计$ $,并使用当前对象进行分配。 这里你不打算在reduce方法中做context.write()。最后,您将在Reducer的清理方法中执行本地比较对象的context.write(),它将具有驱动程序许可证和$的最高集合。
注意:您需要通过设置job.setNumReduceTasks(1)来仅使用一个reducer运行它;不确定这是否符合你的要求。