博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mapreduce案例之找共同好友
阅读量:5120 次
发布时间:2019-06-13

本文共 5509 字,大约阅读时间需要 18 分钟。

数据准备:

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

需求:

1.先求出ABC、….等是谁的好友

2.求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?

需求解读:

1.有题目可得,该关系为单项关系可以理解为关注,即A关注的为BCDEF,B关注的为AK,所以求A B C...是谁的关注,即需要将冒号后边的作为key,前边的作为value进行map,在reduce的时候在合并即可。

2.求两两之间的共同关注,这时我们需要借助1题产生的结果文件,map是从后边的value值两两组合生成两两关系。作为新的key值输入,新的value为1题的key。

reduce的时候,将结果合并即可

源代码如下

第一题:

package Demo5;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.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.Reducer.Context;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/** * @author 星际毁灭 * 找出ABC等人的好友 * */import Demo4.Log1;public class Friend1 {    public static class Map extends Mapper{          private static Text newKey=new Text();          private static final IntWritable one = new IntWritable(1);        public void map(Object key,Text value,Mapper
.Context context) throws IOException, InterruptedException{ String line=value.toString(); String[] array=line.split(":"); //数据实例 A:B,C,D,F,E,O String first=array[0]; //冒号前边部分 String second=array[1]; //冒号后边部分 String[] friend=second.split(","); //冒号后边部分在切割 System.out.println(first+"\t"+second); for(int i=0;i
{ public void reduce(Text key,Iterable
values,Context context) throws IOException, InterruptedException{ String res=""; for(Text val:values) { res+=val.toString()+","; //将结果合并 } context.write(key,new Text(res)); } } public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{ System.setProperty("hadoop.home.dir", "H:\\文件\\hadoop\\hadoop-2.6.4"); Configuration conf=new Configuration(); Path in=new Path("hdfs://192.168.6.132:9000/wys/in/friend1.txt"); Path out=new Path("hdfs://192.168.6.132:9000/wys/out/friend1"); Job job =new Job(conf,"OneSort"); FileInputFormat.addInputPath(job,in); FileOutputFormat.setOutputPath(job,out); job.setJarByClass(Friend1.class); job.setMapperClass(Friend1.Map.class); job.setReducerClass(Friend1.Reduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.waitForCompletion(true); System.exit(job.waitForCompletion(true) ? 0 : 1); } }

 

第二题:

package Demo5;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.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.Reducer.Context;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/** * @author 王翌淞 *  * 求出他们的共同好友 * */public class Friend2 {    public static class Map extends Mapper{          private static Text newKey=new Text();          private static final IntWritable one = new IntWritable(1);        public void map(Object key,Text value,Mapper
.Context context) throws IOException, InterruptedException{ String line=value.toString(); String[] array=line.split("\t"); String first=array[0]; String second=array[1]; String[] friend=second.split(","); System.out.println(first+"\t"+second); //通过两层的for循环,A的好友进行组合,有顺序 for(int i=0;i
{ public void reduce(Text key,Iterable
values,Context context) throws IOException, InterruptedException{ String res=""; for(Text val:values) { res+=val.toString()+" "; } context.write(key,new Text(res)); } } public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{ System.setProperty("hadoop.home.dir", "H:\\文件\\hadoop\\hadoop-2.6.4"); Configuration conf=new Configuration(); Path in=new Path("hdfs://192.168.6.132:9000/wys/out/friend1/part-r-00000"); Path out=new Path("hdfs://192.168.6.132:9000/wys/out/friend2"); Job job =new Job(conf,"OneSort"); FileInputFormat.addInputPath(job,in); FileOutputFormat.setOutputPath(job,out); job.setJarByClass(Friend2.class); job.setMapperClass(Friend2.Map.class); job.setReducerClass(Friend2.Reduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.waitForCompletion(true); System.exit(job.waitForCompletion(true) ? 0 : 1); } }

 

转载于:https://www.cnblogs.com/wys-373/p/11455624.html

你可能感兴趣的文章
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>