Mapreduce实例---共同好友
来源:互联网 发布:软件界面图标 编辑:程序博客网 时间:2024/05/28 17:04
一:问题介绍
原始数据:每个人的好友列表
A:B,C,D,F,E,O
B:A,C,E,K
C:F,A,D,I
D:A,E,F,L
E:B,C,D,M,L
F:A,B,C,D,E,O,M
G:A,C,D,E,F
H:A,C,D,E,O
I:A,O
J:B,O
K:A,C,D
L:D,E,F
M:E,F,G
O:A,H,I,J
……
输出结果:每个人和其他各人所拥有的功能好友
A-B C,E,
A-C D,F,
A-D E,F,
A-E B,C,D,
A-F B,C,D,E,O,
A-G C,D,E,F,
A-H C,D,E,O,
A-I O,
A-J B,O,
A-K C,D,
A-L D,E,F,
A-M E,F,
B-C A,
B-D A,E,
……
二:代码
步骤一:
public class CommonFriendsStepOne {public static class CommonFriendsStepOneMapper extends Mapper<LongWritable, Text, Text, Text>{private Text k = new Text();private Text v = new Text();// A:B,C,D,F,E,O B--> A ; C-->A ; D-->A ; F-->A ....@Overrideprotected void map(LongWritable key, Text value,Context context)throws IOException, InterruptedException {String line = value.toString();String[] split = line.split(":");String[] friends = split[1].split(",");v.set(split[0]);for(String f : friends){k.set(f);context.write(k, v);}}}public static class CommonFriendsStepOneReducer extends Reducer<Text, Text, Text, Text>{/* * 输入的数据 <B A> <B E> <B F> <B J> * 输出的结果 <B A,E,F,J> */private Text v=new Text();@Overrideprotected void reduce(Text friend, Iterable<Text> persons,Context context)throws IOException, InterruptedException {StringBuilder sb=new StringBuilder();for(Text p : persons){sb.append(p).append(",");}v.set(sb.toString());context.write(friend, v);}}public static void main(String[] args) throws Exception, IOException {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(CommonFriendsStepOne.class);job.setMapperClass(CommonFriendsStepOneMapper.class);job.setReducerClass(CommonFriendsStepOneReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));boolean res = job.waitForCompletion(true);System.exit(res ? 0 : 1);}}
步骤二:
public class CommonFriendsStepTwo {static class CommonFriendsStepTwoMapper extends Mapper<LongWritable, Text, Text, Text>{//A I,K,C,B,G,F,H,O,D, B A,F,J,E, private Text k=new Text();private Text v=new Text();@Overrideprotected void map(LongWritable key, Text value,Context context)throws IOException, InterruptedException {String line = value.toString();String[] split = line.split("\t");String[] persons = split[1].split(",");// 对用户进行排序,以免出现GF、FG被视为不同的组合Arrays.sort(persons);v.set(split[0]);// 对整个persons数组做两两组合拼接for(int i=0;i<persons.length-1;i++){for(int j=i+1;j<persons.length;j++){// 输出 <I-J A>k.set(persons[i] + "-" + persons[j]);context.write(k, v);}}}}static class CommonFriendsStepTwoReducer extends Reducer<Text, Text, Text, Text>{// <A-E,B> <A-E,C>.....private Text v = new Text();@Overrideprotected void reduce(Text pair, Iterable<Text> friends,Context context)throws IOException, InterruptedException {StringBuilder sb=new StringBuilder();for(Text f : friends){sb.append(f).append(" ");}// <A-E, B C ..>v.set(sb.toString());context.write(pair, v);}}public static void main(String[] args) throws Exception, IOException {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(CommonFriendsStepTwo.class);job.setMapperClass(CommonFriendsStepTwoMapper.class);job.setReducerClass(CommonFriendsStepTwoReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));boolean res = job.waitForCompletion(true);System.exit(res ? 0 : 1);}}
1 0
- Mapreduce实例---共同好友
- MapReduce:共同好友
- MapReduce寻找共同好友
- MapReduce找共同好友
- MapReduce找共同好友
- MapReduce分析共同好友
- MapReduce实现寻找共同好友
- MapReduce--6--求共同好友
- mapreduce系列(7)--查找共同好友
- MapReduce实战练习四:找出共同好友
- mapreduce应用-找出扣扣共同好友
- 使用MapReduce实现寻找共同好友的案例
- MapReduce--7--求共同好友--改进版JobControl
- MapReduce——求两个人的共同好友算法
- 共同好友
- 共同好友
- <hadoop>编程实例,统计共同好友(个人算法)
- Hadoop/MapReduce 共同好友解决方案:求大量集合的两两交集
- 线程池的原理 精简了一下便于大家理解
- 序列化和反序列化
- 应用程序编译安装的过程
- 汇编语言 递归子程序实现阶乘
- 指针和数组的理解
- Mapreduce实例---共同好友
- latex 算法,算法包 algorithm
- 搜索引擎之齐普夫法则
- 密码对验证
- 黑马——linux学习笔记(一)
- 二分查找
- C++输出系统盘符
- HDU 1010 深搜+剪枝
- 挑战程序竞赛系列(4):2.1深度优先搜索