1、模拟一组好友关系:

aaa  bbb
ccc ddd
eee fff
ggg hhh
bbb zzz
eee iii

(aaa和bbb是好友,ccc和ddd是好友……, 直观可以看出应该给aaa-zzz,fff-iii作好友推荐)

2、将数据导入mapper,两列分别作key和value

<pre name="code" class="java">package cn.nanda.QQ;import java.io.IOException;import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class QQMapper extends Mapper<LongWritable, Text, Text, Text> {@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {String line = value.toString();String[] ss = StringUtils.split(line, "\t");context.write(new Text(ss[0]), new Text(ss[1]));context.write(new Text(ss[1]), new Text(ss[0]));}}

3、书写reducer

package cn.nanda.QQ;import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class QQReducer extends Reducer<Text, Text, Text, Text> {@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {Set<String> set = new HashSet<String>();for (Text text : values) {set.add(text.toString());}Iterator<String> _set = set.iterator();while (_set.hasNext()) {String a = _set.next();System.out.println(a);}if (set.size() > 1) {for (Iterator j = set.iterator(); j.hasNext();) {String name = (String) j.next();for (Iterator i = set.iterator(); i.hasNext();) {String other = (String) i.next();if (!name.equals(other)) {context.write(new Text(name), new Text(other));}}}}}
}

4、申请一个job,并运行mapreduce

package cn.nanda.QQ;import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;import cn.nanda.wordCount.FlowBean;
import cn.nanda.wordCount.FlowSumRunner;public class QQRunner extends Configured implements Tool {public int run(String[] args) throws Exception {Configuration conf = new Configuration();// 如果需要在hdfs云端运行MapReduce,需要加上下面的set,相应的路径填写hdfs上的路径// conf.set("fs.defaultFS","hdfs://localhost:9000/");Job job = Job.getInstance(conf);job.setJarByClass(QQRunner.class);job.setMapperClass(QQMapper.class);job.setReducerClass(QQReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.setInputPaths(job, new Path(args[0]));// 检查输出路径是否存在,若存在,则删除之前的路径,并新建路径Path output = new Path(args[1]);FileSystem fs = FileSystem.get(conf);if (fs.exists(output)) {fs.delete(output, true);}FileOutputFormat.setOutputPath(job, output);return job.waitForCompletion(true) ? 0 : 1;}public static void main(String[] args) throws Exception {int run = ToolRunner.run(new Configuration(), new QQRunner(), args);System.exit(run);}
}

5、运行结果为:

aaa  zzz
zzz aaa
fff iii
iii fff

和我们预期的一样!

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

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

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

  2. Hadoop2.6.0+Linux Centos7+idea环境下:MapReduce二度好友推荐案例

    目录 一.问题描述 二.intellij idea中编写代码+打包项目 三.xftp中上传jar包到Linux 四.hadoop中准备输入数据+运行jar包+查看输出结果 一.问题描述 使用MapRe ...

  3. hadoop-小案例实现qq好友推荐

    一.本文主要是hadoop hdfs文件系统和mapReduce离线计算框架整合小案例 二.前提是读者已经部署了hadoop的namenode.datanode.secodaynamenode 三.分 ...

  4. 用QTP脚本操作腾讯QQ好友买卖功能

    今日玩起了腾讯的好友买卖,操作特别繁琐,无聊之下就写了个脚本去做操作. 相信想学习QTP的读者去做这套小小的脚本一定会有不小的收获.先丢个流程图给大家,脚本还没全部检查完,因为好友都被我折磨完了,PK ...

  5. iOS复习记录日记07-静态单元格和qq好友分组功能[2020]

    前文 这是第7篇 主要记录下静态单元格,顾名思义,一旦设置好后,内容是不可被改变的 一般用于 不可改变的固定单元格列表展示,必须使用uiviewController才可用静态单元格 在uiviewCo ...

  6. PC端实现浏览器点击分享到QQ好友,空间,微信,微博等

    网上现在比较流行的是JIaThis,但是测试的时候,不能分享给QQ好友,一直卡在输入验证码,以下代码亲测有效,可直接使用 <%@ page language="java" c ...

  7. python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  8. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  9. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

最新文章

  1. python 安装nameerror_python NameError:name’file’未定义
  2. python set集合_Python字典(dict)和集合(set)
  3. opencv实战3: CascadeClassifier+Haar特征进行人脸检测
  4. Docker学习总结(41)——三个技巧,将Docker镜像体积减小90%
  5. 快速定位NodeJs线上问题 - 之火焰图篇
  6. python 对目录下文件过滤删除
  7. 8月总庆祝:点击过百万,升级V8,进入前300名
  8. Linux 线程及线程间通信
  9. android nexus 刷机工具包,Nexus5刷机救砖Recovery详细教程
  10. MIT线性代数笔记十四讲 正交向量与正交子空间
  11. 罗永浩Vs王自如:浮躁的世界该如何降温?!
  12. 激光SLAM:激光雷达运动畸变补偿--轮速里程计辅助方法
  13. Xcode 4.3.2 gives error “cannot use super because it is a root class”
  14. 马云点了人类史上最贵“外卖”,又一场“三国杀”即将来临?
  15. 韩版机泛泰A850改mms.apk去除收到短信的国家代码
  16. phalapi可以依赖注入么_phalapi-进阶篇2(DI依赖注入和单例模式)
  17. Java:DateUtils 获取 本上下(周/月)周一周日 最后一天 当月多少天
  18. 用xinnet新网API实现动态域名
  19. openstack之Horizon
  20. 【java环境搭建详细教程】

热门文章

  1. uni-app如何打包成ios应用
  2. mysql日期格式化季度_Mysql 查询某年,某季度,某月,某天搜索方法总结
  3. 日本地震波及全球产业链:芯片价格走势难料
  4. 简单线性回归 解析解 最小二乘法
  5. 【蓝桥杯国赛真题06】python绘制菱形圆环 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析
  6. 【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---排列序数
  7. 打消用户续航焦虑:爱玛全新引擎5技术再成行业标杆
  8. 云原生底座之上,顺丰智慧供应链领跑的秘密
  9. Hbase基本shell操作
  10. 用户旅程方法论_3种有效准备数字旅程中流程改进的方法