利用MapReduce实现单表关联比多表关联稍微复杂一些。
例如有如下一个文件,两列数据:
<pre name="code" class="java">followed following
1 2
2 3
5 7
7 6
followed是被关注者,following是关注者,如果将其看做是一个简单的微博关注关系,我们可以从中看出,3关注了2,2关注了1,那么我们可以向3推荐1,因为1是3的偶像的偶像;6关注了7,7关注了5,则5是6的偶像的偶像,我们可以向6推荐5于是可以形成如下的推荐列表:
followed following
1 3
5 6
意即向6推荐5,向3推荐1.
实现思路如下:首先在map中将数据读入后生成如下两个表:一个左表一个右表:
这个是右表,在following列加“a+”标志:
followed following
1 a+2
2 a+3
5 a+7
7 a+6
这个是左表,在followed列加“b+”标志:
following <span style="font-family: Arial, Helvetica, sans-serif;">followed</span>
2 b+1
3 b+2
7 b+5
6 b+7
很显然,有一部分following其自身也是followed,将这两列数据和在一起的时候,