如何使用MapReduce从文本文件中找到相互的数字?

时间:2018-03-22 18:33:16

标签: python hadoop mapreduce

我是MapReduce的新手,我正在开展一个项目来增加我的知识。 现在我必须在Hadoop中编写一个MapReduce程序,以便从一大块数据中找到共同的朋友。

输入文件的格式为

<User><TAB><Friends>

这是一个包含

等数据的文本文件
0   1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94
1   0,5,20,135,2409,8715,8932,10623,12347,12846,13840,13845,14005,20075,21556,22939,23520,28193,29724,29791,29826,30691,31232,31435,32317,32489,34394,35589,35605,35606,35613,35633,35648,35678,38737,43447,44846,44887,49226,49985,623,629,4999,6156,13912,14248,15190,17636,19217,20074,27536,29481,29726,29767,30257,33060,34250,34280,34392,34406,34418,34420,34439,34450,34651,45054,49592
2   0,117,135,1220,2755,12453,24539,24714,41456,45046,49927,6893,13795,16659,32828,41878
3   0,12,41,55,1532,12636,13185,27552,38737
4   0,8,14,15,18,27,72,80,15326,19068,19079,24596,42697,46126,74,77,33269,38792,38822
5   0,1,20,2022,22939,23527,30257,32503,35633,41457,43262,44846,49574,31140,32828

因此,1,2,3,4,5等表示标签,而在它们前面写的数字是他们的朋友。我要做的是:

  1. 从这一大块数据中提供共同的朋友推荐
  2. 只有一个MapReduce作业可以解决这个问题。
  3. 输出格式为<User><TAB><Recommendations>
  4. 我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

您是否尝试过这种方法:

一个。尝试创建k,列表对,其中k是显示为朋友的数字,v是用户。 例如:(1,&lt; 0,5&gt;),(20,&lt; 1,5&gt;),(5,&lt; 0&gt;)   这将是映射器的输出。

湾在reducer中,收集所有密钥。     并检查值的大小,           如果size(value)&gt; = 2 ==&gt;这把钥匙是共同的朋友。

℃。将此共同朋友推荐给其他朋友,即此密钥中的值除外。

d。以您需要的方式格式化输出。

这可能只是其中一种可能的解决方案...... 如果您认为任何其他解决方案更可行,请分享。