使用Hadoop寻找用户的好友列表

使用Hadoop寻找用户的好友列表

1.问题描述

假定有一个社会网络A,每一个顶点表示一位用户,每一条边表示连接的两位用户是好友。A=(V,G),其中V是用户的集合,G是边的集合,即好友的集合。用文件分别保存V和G的数据,示例如下。例如G文件中,“a,b”表示用户a和用户b是好友。

#V文件:
a
b
c
…
#G文件:
a,b
a,c
b,e
b,k
…

找出每一位用户的好友,输出好友列表,每一行代表一个用户和他的好友列表。例如:

a: b,c,e,g,k
b: a,e,k
c: a,d,g
……

2.思路

MapReduce执行时会把文件切分为不同的分片,每个分片输入到不同的Map任务上。这里Map的输入采用的是Hadoop默认的<key, value>,即文件的行号作为key,文件的一样作为value。比如G文件的第一行内容为“a,b”,那么Map此时的输入是<1, “a,b”>。Map端要做的事就是将得到的value(比如“a,b”)拆分为两个字符串“a”和“b”,然后输出两个键值对(<a,b>和<b,a>)。Reduce端正式处理数据时因为数据在前面经过了Map端和Reduce端的Shuffle过程处理,此时键值对都是有序的,要处理的数据就是<key, value-list>的形式。因为value-list里面可能有相同的字符串,可以在重写的reduce( )函数中定义一个TreeSet集合,然后遍历value-list里面的元素将得到的元素放入TreeSet集合中,得到的集合是有序并且无重复元素的。然后可以遍历TreeSet里面的元素使用字符串拼接作为输出的value,key不变,将<key, value>写入到最终文件中。

3.带注解的MapReduce程序

import java.io.IOException;
import java.util.Set;
import java.util.TreeSet;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class Friends {
   
	
	//Map处理逻辑具体代码
	public static
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值