Mapreduce实例---共同好友
一:问题介绍
原始数据:每个人的好友列表
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);}
}
Mapreduce实例---共同好友相关推荐
- Hadoop之mapreduce 实例三
Hadoop之mapreduce 实例三 转载于:https://www.cnblogs.com/chaoren399/archive/2013/01/04/2844503.html
- 学习笔记Hadoop(十四)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例
四.MapReduce API介绍 一般MapReduce都是由Mapper, Reducer 及main 函数组成. Mapper程序一般完成键值对映射操作; Reducer 程序一般完成键值对聚合 ...
- 17.大数据---MapReduce实现共同好友(好友关系图实现)
MapReduce实现共同好友(好友关系图实现-倚天屠龙记关系) 背景 如今大多数的社交网站都有提供的共同好友的服务,可以帮助与好友之间共享图片,消息,视频 博客的好友列表数据,冒号前是一个用户,冒号 ...
- Hadoop环境搭建测试以及MapReduce实例实现
目录 1 任务 2 过程 2.1 熟悉常用的 Hadoop 命令 2.2 Hadoop环境搭建 1.SSH登录权限设置 2.安装Java环境 3.Hadoop的安装 4.伪分布式安装配置 2.3 Wo ...
- 第三节 Hadoop学习案例——MapReduce课程设计 好友推荐功能
提示:文章内容主要以案例为主 目录 前言 项目说明 一,程序需求 1.需求 2.数据 二,编码操作 1.项目建包目录 2.FriendsRecommend.java 3.FriendsRecommen ...
- 7.测试hadoop安装成功与否,并跑mapreduce实例
hadoop2.6.5集群安装及mapreduce测试运行 http://blog.csdn.net/fanfanrenrenmi/article/details/54232184 [准备工作]在每一 ...
- WordCount——MapReduce 实例入门
本文我们从一个简单的实例出发,统计文本中不同单词出现的次数,来讲述 MapReduce 的执行流程. 考虑如下的文本信息(文件名为hello): hello you hello me MapReduc ...
- 实例1QQ好友列表界面和九宫格
在此实例中: plist文件中是假数据,数组中每一项都是一个字典,分组名和各个好友 创建一个数组成员变量,将plist里的值转到数组中. 创建一个字典成员变量,用来存储判断当前分组是否展开的依据,之所 ...
- 用hadoop2.7.1 mapreduce实现QQ好友推荐功能
1.模拟一组好友关系: aaa bbb ccc ddd eee fff ggg hhh bbb zzz eee iii (aaa和bbb是好友,ccc和ddd是好友--, 直观可以看出应该给aaa-z ...
最新文章
- 10款屏幕取色器/颜色拾取工具软件介绍及下载地址[转]
- CRM客户关系管理系统(十三)
- OllyDBG 入门系列(二)-字串参考
- px~em~pt转换表
- java学习笔记(五)集合
- nagios监控服务短信报警开发及部署细节
- python 迭代器的方法_python--魔法方法,属性和迭代器
- 跟兄弟连学PHP PDF 分享
- Android 修改屏幕亮度
- Java美颜相机(1)图像处理
- python 解决Fatal error in launcher:错误问题
- 使用淘宝api直接上传图片的方法
- 【独行秀才】macOS Big Sur 11.5 Beta 1(20G5023d)原版镜像
- mac电脑使用入门详解
- Zemax-偏振、膜层和散射
- 【EmguCV系列一】EmguCV下载安装以及配置
- 《模拟电子技术基础》笔记——上交大郑益慧主讲——辅助教材《电子电路原理第四版》—— 要反反复复看直到记住图的推导过程——出错了欢迎指正——由于是快速刷了一遍还是要反复复习——学习这里面的思路
- DWM缩略图,但是使用的是IDCompositionVisual
- Jeet – 先进,直观,灵活的 CSS 网格系统
- 封装 继承 多态理解