java - 查找所有用户的好友# : How to implement with Hadoop Mapreduce?

标签 java hadoop mapreduce

假设我有如下输入:

(1,2)(2,1)(1,3)(3,2)(2,4)(4,1) 

预期输出如下:

(1,(2,3,4)) -> (1,3) //second index is total friend #
(2,(1,3,4)) -> (2,3)
(3,(1,2))   -> (3,2)
(4,(1,2))   -> (4,2)

我知道如何在 Java 中使用哈希集来做到这一点。但不知道这如何与 mapreduce 模型一起工作。任何人都可以就这个问题提出任何想法或示例代码吗?我会很感激的。

-------------------------------------------- --------------------------------------

这是我天真的解决方案:1 个映射器,两个 reducer 。 映射器 将组织输入(1,2),(2,1),(1,3);

将输出组织为

*(1,hashset<2>),(2,hashSet<1>),(1,hashset<2>),(2 ,哈希集<1>),(1,哈希集<3>),(3,哈希集<1>).*

Reducer1:

将mapper的输出作为输入,输出为:

*(1,hashset<2,3>), (3,hashset<1>)and (2,hashset<1>)< em>*

Reducer2:

将reducer1的输出作为输入,输出为:

*(1,2)、(3,1) 和 (2,1)*

这只是我天真的解决方案。我不确定这是否可以通过 hadoop 的代码来完成。

最佳答案

我认为应该有一个简单的方法来解决这个问题。

Mapper Input: (1,2)(2,1)(1,3)(3,2)(2,4)(4,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,3,4]
2 => [1,3,4]
3 => [1,2]
4 => [1,2]

现在,您可以根据需要格式化结果。 :) 让我知道是否有人可以看到这种方法中的任何问题

关于java - 查找所有用户的好友# : How to implement with Hadoop Mapreduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389529/

相关文章:

hadoop - 按值顺序排序Hadoop

python - 聚合数据框pyspark

java - Hadoop Mapreduce Wordcount 示例意外终止

python - 什么是从hadoop导出数据到Oracle句柄删除且停机时间最短的有效方法?

hadoop - 如何查看加密文件的内容?[hadoop透明加密]

java - 如何在作业完成之前在 hadoop 中重新运行整个 map/reduce?

java - 非法状态异常 : Cannot convert value of type LdapTemplate to LdapTemplate

java - Play Framework 2 身份验证选项

java - 在Android中可以使用哪些编程语言进行开发?

java - 为什么此代码不能确保已完成完整的垃圾回收?