【尚学堂·Hadoop学习】MapReduce案例2--好友推荐
案例描述
根据好友列表,推荐好友的好友
数据集
tom hello hadoop cat world hadoop hello hive cat tom hive mr hive hello hive cat hadoop world hello mr hadoop tom hive world hello tom world hive mr
代码
MyFOF.class
package com.hadoop.mr.fof; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; 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; public class MyFOF { public static void main(String[] args) { try { //Conf Configuration conf = new Configuration(true); Job job = Job.getInstance(conf); job.setJarByClass(MyFOF.class); //Map job.setMapperClass(FMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); //Reduce job.setReducerClass(FReducer.class); //Input&Output Path in = new Path("/user/hadoop/input/friends.txt"); FileInputFormat.addInputPath(job, in); Path out = new Path("/user/hadoop/output/friends/"); if(out.getFileSystem(conf).exists(out)){ out.getFileSystem(conf).delete(out,true); } FileOutputFormat.setOutputPath(job, out); //Submit job.waitForCompletion(true); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
FMapper.class
package com.hadoop.mr.fof; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.util.StringUtils; public class FMapper extends Mapper<LongWritable, Text, Text, IntWritable> { Text mkey = new Text(); IntWritable mval = new IntWritable(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //tom hello hadoop cat String [] strs = StringUtils.split(value.toString(),' '); /* * 找直接、间接关系 * value: 0-直接关系;1-间接关系 * 直接关系:tom:hello tom:hadoop tom:cat * 间接关系:hello:hadoop hello:cat hadoop:cat */ for(int i=1;i<strs.length;i++){ //与好友清单中的好友为直接关系 mkey.set(getFof(strs[0], strs[i])); mval.set(0); context.write(mkey, mval); //在好友列表内 好友之间为间接关系 for(int j = i+1;j < strs.length;j++){ mkey.set(getFof(strs[i],strs[j])); mval.set(1); context.write(mkey, mval); } } } //按字典序进行字符串拼接 public static String getFof(String s1,String s2){ if(s1.compareTo(s2) < 0){ return s1+":"+s2; } return s2+":"+s1; } }
FReducer.class
package com.hadoop.mr.fof; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class FReducer extends Reducer<Text,IntWritable, Text, IntWritable> { IntWritable rval = new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { /* * 数据如下: * hello:hadoop 0 * hello:hadoop 1 */ int flg = 0; //标志 int sum = 0; //共同好友总数 for(IntWritable v :values){ if(v.get() == 0){ flg = 1; } sum += v.get(); } if(flg == 0){ rval.set(sum); context.write(key, rval); } } }
运行结果
本次案例只是处理了两个人之间共同好友的数量。
【尚学堂·Hadoop学习】MapReduce案例2--好友推荐的更多相关文章
- 【尚学堂·Hadoop学习】MapReduce案例1--天气
案例描述 找出每个月气温最高的2天 数据集 -- :: 34c -- :: 38c -- :: 36c -- :: 32c -- :: 37c -- :: 23c -- :: 41c -- :: 27 ...
- 尚学堂xml学习笔记
1.打开eclipse,文件-新建java project,输入文件的名字,比如输入20181112. 2.对着src右键,选择new-file,输入文件名字,比如:book.xml. 3.开始写.x ...
- 大数据学习——mapreduce案例join算法
需求: 用mapreduce实现select order.orderid,order.pdtid,pdts.pdt_name,oder.amount from orderjoin pdtson ord ...
- 尚学堂 hadoop
mr spark storm 都是分布式计算框架,他们之间不是谁替换谁的问题,是谁适合做什么的问题. mr特点,移动计算,而不移动数据. 把我们的计算程序下发到不同的机器上面运行,但是不移动数据. 每 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Hadoop学习之旅三:MapReduce
MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...
- hadoop 学习笔记:mapreduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- Hadoop学习笔记:MapReduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- 学习java的视频资源(尚学堂)(比较老旧,但是还是挺好用)
本人新手,转入IT,一开始在学校的时候看过尚学堂 马士兵讲过的java基础视频教程,这次深入学习呢,就从百度云盘找了一整套的视频资源.之后越深入的学习呢,发现这些视频资源VeryCD上都发布了,地址 ...
随机推荐
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- 一个 C# 文件权限的帮助类
直接贴代码了: FilePermissionHelper.cs using System.Collections.Generic; using System.IO; using System.Secu ...
- uWSGI、WSGI、uwsgi是什么?
uWSGI是一个web服务器,它实现了WSGI协议.uwsgi协议.HTTP等协议: WSGI是web服务器网管接口,是一套协议,用于接收用户请求并将请求进行初次封装,然后交给web框架: uwsgi ...
- VSCode 配置并使用less
1.安装node.js 2.安装less npm install less -g 3.安装VS插件 Easy LESS 4.编辑保存.less文件,会在对应的目录下生成对应的.css文件
- C# 如何使用配置文件保存应用程序里的配置数据
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...
- 菜鸟学IT之python网页爬取初体验
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2881 1. 简单说明爬虫原理 爬虫简单来说就是通过程序模拟浏览器放松请求站 ...
- Spring项目定时任务
最近某协会网站有个需求:显示当天访问量,很明显需要做俩步:一个是访问请求量的显示,一个需要每天00点恢复访问次数为0 所以需要做个定时任务:每天00点更新: 注解用法Spring配置: 1.在spri ...
- 第一章 初识 MyBatis
概念:优秀持久层框架:实体类和SQL语句之间建立映射关系 与hibernate区别 :自动生成sql语句,并且建立实体类和数据表的映射. MyBatis基本要素:核心对象 核心配置文件 S ...
- 使用Crawler框架搭建自己的爬虫框架MyCrawler
自己写一个爬虫框架的目的: 完美架构 在实际的数据采集编码过程中,发现代码比较乱,抓取数据,存储数据的代码混杂在一起,为了构建比较完美的数据采集框架 敏捷开发 将数据采集进行标准流程化,每个标准流程都 ...
- servlet(5) HttpSession
Servlet 提供的 HttpSession 接口,提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP ...