一:问题介绍

原始数据:每个人的好友列表

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实例---共同好友相关推荐

  1. Hadoop之mapreduce 实例三

    Hadoop之mapreduce 实例三 转载于:https://www.cnblogs.com/chaoren399/archive/2013/01/04/2844503.html

  2. 学习笔记Hadoop(十四)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例

    四.MapReduce API介绍 一般MapReduce都是由Mapper, Reducer 及main 函数组成. Mapper程序一般完成键值对映射操作; Reducer 程序一般完成键值对聚合 ...

  3. 17.大数据---MapReduce实现共同好友(好友关系图实现)

    MapReduce实现共同好友(好友关系图实现-倚天屠龙记关系) 背景 如今大多数的社交网站都有提供的共同好友的服务,可以帮助与好友之间共享图片,消息,视频 博客的好友列表数据,冒号前是一个用户,冒号 ...

  4. Hadoop环境搭建测试以及MapReduce实例实现

    目录 1 任务 2 过程 2.1 熟悉常用的 Hadoop 命令 2.2 Hadoop环境搭建 1.SSH登录权限设置 2.安装Java环境 3.Hadoop的安装 4.伪分布式安装配置 2.3 Wo ...

  5. 第三节 Hadoop学习案例——MapReduce课程设计 好友推荐功能

    提示:文章内容主要以案例为主 目录 前言 项目说明 一,程序需求 1.需求 2.数据 二,编码操作 1.项目建包目录 2.FriendsRecommend.java 3.FriendsRecommen ...

  6. 7.测试hadoop安装成功与否,并跑mapreduce实例

    hadoop2.6.5集群安装及mapreduce测试运行 http://blog.csdn.net/fanfanrenrenmi/article/details/54232184 [准备工作]在每一 ...

  7. WordCount——MapReduce 实例入门

    本文我们从一个简单的实例出发,统计文本中不同单词出现的次数,来讲述 MapReduce 的执行流程. 考虑如下的文本信息(文件名为hello): hello you hello me MapReduc ...

  8. 实例1QQ好友列表界面和九宫格

    在此实例中: plist文件中是假数据,数组中每一项都是一个字典,分组名和各个好友 创建一个数组成员变量,将plist里的值转到数组中. 创建一个字典成员变量,用来存储判断当前分组是否展开的依据,之所 ...

  9. 用hadoop2.7.1 mapreduce实现QQ好友推荐功能

    1.模拟一组好友关系: aaa bbb ccc ddd eee fff ggg hhh bbb zzz eee iii (aaa和bbb是好友,ccc和ddd是好友--, 直观可以看出应该给aaa-z ...

最新文章

  1. 10款屏幕取色器/颜色拾取工具软件介绍及下载地址[转]
  2. CRM客户关系管理系统(十三)
  3. OllyDBG 入门系列(二)-字串参考
  4. px~em~pt转换表
  5. java学习笔记(五)集合
  6. nagios监控服务短信报警开发及部署细节
  7. python 迭代器的方法_python--魔法方法,属性和迭代器
  8. 跟兄弟连学PHP PDF 分享
  9. Android 修改屏幕亮度
  10. Java美颜相机(1)图像处理
  11. python 解决Fatal error in launcher:错误问题
  12. 使用淘宝api直接上传图片的方法
  13. 【独行秀才】macOS Big Sur 11.5 Beta 1(20G5023d)原版镜像
  14. mac电脑使用入门详解
  15. Zemax-偏振、膜层和散射
  16. 【EmguCV系列一】EmguCV下载安装以及配置
  17. 《模拟电子技术基础》笔记——上交大郑益慧主讲——辅助教材《电子电路原理第四版》—— 要反反复复看直到记住图的推导过程——出错了欢迎指正——由于是快速刷了一遍还是要反复复习——学习这里面的思路
  18. DWM缩略图,但是使用的是IDCompositionVisual
  19. Jeet – 先进,直观,灵活的 CSS 网格系统
  20. 封装 继承 多态理解

热门文章

  1. 二维条码 QR code 的解码
  2. 男人是瑜伽服的下一个风口?这家公司靠他们拯救了股价
  3. 鸿蒙系统和魅族手机,终于有手机厂商接入鸿蒙系统了!
  4. 我都觉得自己的名字很土,土得就像一个草包
  5. 基于CART分类方法的决策树(机器学习)
  6. nginx详解及实战
  7. IDEA:ideaIU的文件夹变成蓝色的文件夹?
  8. Phpstudy隐藏后门
  9. yaf框架整合smarty
  10. 耳鸣常见的因素有哪些?