java – 查找所有用户的朋友:如何使用Hadoop Mapreduce实现?
说我输入如下:
(1,2)(2,1)(1,3)(3,4)(4,1) 输出预计如下: (1,(2,3,4)) -> (1,3) //second index is total friend # (2,(1,4)) -> (2,3) (3,2)) -> (3,2) (4,2)) -> (4,2) 我知道如何在java中使用hashset执行此操作.但不知道这是如何使用mapreduce模型的.任何人都可以就此问题抛出任何想法或示例代码吗?我会很感激. ————————————————– ———————————- 这是我天真的解决方案:1个映射器,2个减速器. 将输出组织为 *(1,HashSet的< 2 – ),HashSet的< 1为卤素),HashSet的&3; 1+),(3,HashSet的< 1为卤素;)*. Reducer1: 将mapper的输出作为输入和输出: *(1,hashset< 2,3>),hashset< 1>)和(2,hashset< 1>)* Reducer2: 将reducer1的输出作为输入和输出: *(1,1)和(2,1)* 这只是我天真的解决方案.我不确定这是否可以通过hadoop的代码完成. 解决方法
我认为应该有一个简单的方法来解决这个问题.
Mapper Input: (1,1) 只需为每对发出两条记录,如下所示: Mapper Output/ Reducer Input: Key => Value 1 => 2 2 => 1 2 => 1 1 => 2 1 => 3 3 => 1 3 => 2 2 => 3 2 => 4 4 => 2 4 => 1 1 => 1 在reducer方面,你会得到4个不同的组,如下所示: Reducer Output: Key => Values 1 => [2,4] 2 => [1,4] 3 => [1,2] 4 => [1,2] 现在,您可以根据需要格式化结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |