用hadoop2.7.1 mapreduce实现QQ好友推荐功能
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好友推荐功能相关推荐
- 第三节 Hadoop学习案例——MapReduce课程设计 好友推荐功能
提示:文章内容主要以案例为主 目录 前言 项目说明 一,程序需求 1.需求 2.数据 二,编码操作 1.项目建包目录 2.FriendsRecommend.java 3.FriendsRecommen ...
- Hadoop2.6.0+Linux Centos7+idea环境下:MapReduce二度好友推荐案例
目录 一.问题描述 二.intellij idea中编写代码+打包项目 三.xftp中上传jar包到Linux 四.hadoop中准备输入数据+运行jar包+查看输出结果 一.问题描述 使用MapRe ...
- hadoop-小案例实现qq好友推荐
一.本文主要是hadoop hdfs文件系统和mapReduce离线计算框架整合小案例 二.前提是读者已经部署了hadoop的namenode.datanode.secodaynamenode 三.分 ...
- 用QTP脚本操作腾讯QQ好友买卖功能
今日玩起了腾讯的好友买卖,操作特别繁琐,无聊之下就写了个脚本去做操作. 相信想学习QTP的读者去做这套小小的脚本一定会有不小的收获.先丢个流程图给大家,脚本还没全部检查完,因为好友都被我折磨完了,PK ...
- iOS复习记录日记07-静态单元格和qq好友分组功能[2020]
前文 这是第7篇 主要记录下静态单元格,顾名思义,一旦设置好后,内容是不可被改变的 一般用于 不可改变的固定单元格列表展示,必须使用uiviewController才可用静态单元格 在uiviewCo ...
- PC端实现浏览器点击分享到QQ好友,空间,微信,微博等
网上现在比较流行的是JIaThis,但是测试的时候,不能分享给QQ好友,一直卡在输入验证码,以下代码亲测有效,可直接使用 <%@ page language="java" c ...
- python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
- python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
- python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
最新文章
- python 安装nameerror_python NameError:name’file’未定义
- python set集合_Python字典(dict)和集合(set)
- opencv实战3: CascadeClassifier+Haar特征进行人脸检测
- Docker学习总结(41)——三个技巧,将Docker镜像体积减小90%
- 快速定位NodeJs线上问题 - 之火焰图篇
- python 对目录下文件过滤删除
- 8月总庆祝:点击过百万,升级V8,进入前300名
- Linux 线程及线程间通信
- android nexus 刷机工具包,Nexus5刷机救砖Recovery详细教程
- MIT线性代数笔记十四讲 正交向量与正交子空间
- 罗永浩Vs王自如:浮躁的世界该如何降温?!
- 激光SLAM:激光雷达运动畸变补偿--轮速里程计辅助方法
- Xcode 4.3.2 gives error “cannot use super because it is a root class”
- 马云点了人类史上最贵“外卖”,又一场“三国杀”即将来临?
- 韩版机泛泰A850改mms.apk去除收到短信的国家代码
- phalapi可以依赖注入么_phalapi-进阶篇2(DI依赖注入和单例模式)
- Java:DateUtils 获取 本上下(周/月)周一周日 最后一天 当月多少天
- 用xinnet新网API实现动态域名
- openstack之Horizon
- 【java环境搭建详细教程】