mysql共同好友_Hadoop实例之寻找博客中共同好友
以下是博客的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)
求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?
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、….等是谁的好友
packagemapreduce;importjava.io.IOException;importjava.net.URI;importjava.net.URISyntaxException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/***
*@author* 2019.9.3
* 找到博客中共同好友 第一步 得到ABC...是谁的好友
**/
public classFindFriend {public static class FindFriendsMapper extends Mapper{public static Text peoples = new Text(); //定义输出键
public static Text friends = new Text();//定义输出值
@Overrideprotected void map(LongWritable key, Text value, Mapper.Context context)throwsIOException, InterruptedException {
String line= value.toString(); //读取数据并转为字符串 数据样例为A:B,C,D,F,E,O
String array[] = line.split(":"); //处理数据,先根据:将字符串分为两部分存入数组
String friend[]=array[1].split(",");//处理后一部分字符串,根据,分割并存入数组friend
for(int i=0;i
{
peoples.set(friend[i]);//以样例为例,将A的好友B当做输出键
friends.set(array[0]);//将A做为输出值
context.write(peoples,friends);//该样例键值对key:B value 含义即为B是A的好友
}
}
}public static class FindFriendsReduce extends Reducer{
@Overrideprotected void reduce(Text key, Iterable values, Reducer.Context context)throwsIOException, InterruptedException {
String friend="";//定义一个字符串用来拼接最终结果
for (Text value : values) {//循环values,拼接字符串,即可得到以该键值如B为好友的所有值
friend=friend+value+",";
}
context.write(key,new Text(friend));//写入
}
}public static voidmain(String[] args)throwsIOException, ClassNotFoundException, InterruptedException, URISyntaxException {final String INPUT_PATH = "hdfs://192.168.68.130:9000/user/hadoop/blogfriend.txt";//读入文件地址
final String OUTPUT_PATH = "hdfs://192.168.68.130:9000/user/hadoop/output";//输出文件地址,output不能存在
Configuration conf= newConfiguration();final FileSystem fileSystem = FileSystem.get(newURI(INPUT_PATH), conf);if (fileSystem.exists(newPath(OUTPUT_PATH))) {
fileSystem.delete(new Path(OUTPUT_PATH), true);
}
Job job= Job.getInstance(conf, "Find_Friend");//设置一个用户定义的job名称
job.setJarByClass(Find_Friend.class);
job.setMapperClass(FindFriendsMapper.class); //为job设置Mapper类
job.setReducerClass(FindFriendsReduce.class); //为job设置Reducer类
job.setOutputKeyClass(Text.class); //为job的输出数据设置Key类
job.setOutputValueClass(Text.class); //为job输出设置value类
FileInputFormat.addInputPath(job,newPath(INPUT_PATH));
FileOutputFormat.setOutputPath(job,newPath(OUTPUT_PATH));
System.exit(job.waitForCompletion(true) ? 0 : 1); //运行job
}
}
该段程序运行完成后,得到的结果应为:
A I,K,C,B,G,F,H,O,D,
B A,F,J,E,
C A,E,B,H,F,G,K,
D G,C,K,A,L,F,E,H,
E G,M,L,H,A,F,B,D,
F L,M,D,C,G,A,
G M,
H O,
I O,C,
J O,
K B,
L D,E,
M E,F,
O A,H,I,J,F,
接下来来进行第二步,得到哪些人两两之间有共同好友,及他俩的共同好友都有谁
packagemapreduce;importjava.io.IOException;importjava.net.URI;importjava.net.URISyntaxException;importjava.util.HashSet;importjava.util.Set;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public classFind_Friend {public static class FindFriendsMapper extends Mapper{public static Text peoples = new Text();//定义输出键
public static Text friends = new Text();//定义输出值
@Overrideprotected void map(LongWritable key, Text value, Mapper.Context context)throwsIOException, InterruptedException {
String line= value.toString();//读入文件,得到样例字符串为A I,K,C,B,G,F,H,O,D,
String array[] = line.split(" ");//处理字符串并存入数组
String friend[]=array[1].split(",");//处理字符串并存入数组//循环得到某两个具有共同好友的人,以及他们的共同好友是谁 如:I,K共同好友为A I,C共同好友为A
for(int i=0;i
{for(int j=i+1;j
{
Set set = new HashSet();//这里定义一个hashset类型的数组,向hashset数组中存入数据时,会自动按照哈希数进行排序,这样就避免了如A-C,C-A的重复//将具有共同好友的两个人存入数组
set.add(friend[i]);
set.add(friend[j]);
peoples.set(set.toString());
friends.set(array[0]);
context.write(peoples,friends);//写入
}
}
}
}public static class FindFriendsReduce extends Reducer{
@Overrideprotected void reduce(Text key, Iterable values, Reducer.Context context)throwsIOException, InterruptedException {
String friend="";for(Text value : values) {
friend=friend+value+" ";
}
context.write(key,newText(friend));
}
}public static voidmain(String[] args)throwsIOException, ClassNotFoundException, InterruptedException, URISyntaxException {final String INPUT_PATH = "hdfs://192.168.68.130:9000/user/hadoop/output/part-r-00000";//地址为第一步输出的文件地址
final String OUTPUT_PATH = "hdfs://192.168.68.130:9000/user/hadoop/output8";
Configuration conf= newConfiguration();final FileSystem fileSystem = FileSystem.get(newURI(INPUT_PATH), conf);if (fileSystem.exists(newPath(OUTPUT_PATH))) {
fileSystem.delete(new Path(OUTPUT_PATH), true);
}
Job job= Job.getInstance(conf, "Find_Friend");//设置一个用户定义的job名称
job.setJarByClass(Find_Friend.class);
job.setMapperClass(FindFriendsMapper.class); //为job设置Mapper类
job.setReducerClass(FindFriendsReduce.class); //为job设置Reducer类
job.setOutputKeyClass(Text.class); //为job的输出数据设置Key类
job.setOutputValueClass(Text.class); //为job输出设置value类
FileInputFormat.addInputPath(job,newPath(INPUT_PATH));
FileOutputFormat.setOutputPath(job,newPath(OUTPUT_PATH));
System.exit(job.waitForCompletion(true) ? 0 : 1); //运行job
}
}
得到的结果最终结果为:
[A, B] C E
[A, C] D F
[A, D] F E
[A, E] B D C
[A, F] C B O D E
[A, G] F D E C
[A, H] D O E C
[A, I] O
[A, J] O B
[A, K] D C
[A, L] E D F
[A, M] F E
[B, C] A
[B, D] E A
[B, E] C
[B, F] E A C
[B, G] C A E
[B, H] E C A
[B, I] A
[B, K] C A
[B, L] E
[B, M] E
[B, O] A
[C, D] F A
[C, E] D
[C, F] D A
[C, G] D F A
[C, H] A D
[C, I] A
[C, K] D A
[C, L] D F
[C, M] F
[C, O] I A
[D, E] L
[D, F] A E
[D, G] E A F
[D, H] E A
[D, I] A
[D, K] A
[D, L] E F
[D, M] E F
[D, O] A
[E, F] B M D C
[E, G] D C
[E, H] D C
[E, J] B
[E, K] D C
[E, L] D
[F, G] C D A E
[F, H] A E O C D
[F, I] O A
[F, J] O B
[F, K] A C D
[F, L] E D
[F, M] E
[F, O] A
[G, H] A D E C
[G, I] A
[G, K] C A D
[G, L] F D E
[G, M] F E
[G, O] A
[H, I] A O
[H, J] O
[H, K] A D C
[H, L] D E
[H, M] E
[H, O] A
[I, J] O
[I, K] A
[I, O] A
[K, L] D
[K, O] A
[L, M] F E
mysql共同好友_Hadoop实例之寻找博客中共同好友相关推荐
- MySQL DQL语句基础(随堂博客)
MySQL DQL语句基础(随堂博客) 数据准备 查询数据 条件查询 本博客为课程随堂博客作业,个人技术有限,表达略显抽象,望请见谅 数据库在执行DQL的时候,不会都数据进行改动,仅仅是看.只要把服务 ...
- 这可能是最全的在Ubunto安装idea,maven以及进行Wordcount实例的一个博客了
文章目录 idea安装: 1.下载安装包并移动 2.解压 3.赋权限 4.启动idea 5.安装 安装maven 1.解压maven包 2.设置权限: 3.配置变量 4.验证是否存在 5.修改sett ...
- CSDN博客添加QQ好友按钮
1.进入QQ推广网站 选择推广工具--选择组件样式及提示语 2.复制生成的代码(如图1)到博客栏目 3.会提示如下错误 4.简单,选一张自己喜欢的图片上传到CSDN博客中,注意在markdown编辑模 ...
- 博客中gitalk最新评论的获取 github api使用
博客中,对于网友的评论以及每篇文章的评论数还是很重要的.但是基于静态的页面想要存储动态的评论数据是比较难的,一般博客主题中都内置了评论插件,但是博客主题中对于最新评论的支持显示还是很少的,至少目前我是 ...
- 5年前我在博客中写的三目运算符的空指针问题,终于被阿里巴巴开发手册收录了。...
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 267篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 最近,阿里巴巴Java ...
- lighthouse_Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse
lighthouse by Oliver Nybroe 由Oliver Nybroe Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse (GraphQL in ...
- hexo博客中添加音乐播放器
1. 简介 本篇文章是介绍基于网易云iframe插件在hexo博客中加装音乐播放器的方法,无需安装任何额外插件. 2.安装步骤 在网易云音乐中打开你想要插入的音乐页面,点击 生成外联播放器. 在网页中 ...
- 在博客中加入“花絮”效果
在博客中加入Snap Shots Snap Shots表示"花絮"的意思,在博客中可以使用Snap Shots来添加"花絮"效果. 先演示一遍效果,看是否能用: ...
- 如何将视频网站中的视频插入到博客中
如何将视频网站中的视频插入到博客中 拿优酷网的视频(http://v.youku.com/v_show/id_XMjA2NTA3NzY0.html)为例,操作方法如下: 1.找到该视频下方的分享按钮, ...
最新文章
- Java Swing 探索(一)LayoutManager
- [java]处理utf-8 bom字符串的bom头
- 软件使用 excel
- 公众号质量改进调查问卷
- 10个人里有几个大学生?
- 设计模式——中介者模式
- oracle oic配置,Oracle数据库 client配置
- 字符串处理 —— 单模式匹配
- AndroidのTextView之CompoundDrawable那些坑
- CTFHUB技能树-Misc-流量分析-ICMP
- 【转】Leopard 安装教程
- 三层结构对多语言的支持
- mysql重启服务命令_重启mysql命令
- python安装apk到手机_python自动安装apk文件
- Anaconda中spyder5闪退如何解决
- 如何自己开发一个小程序?
- iOS线下分享《RunLoop》by 孙源@sunnyxx
- 解决Openwrt安装插件提示一下错误的办法
- AJAX技术学院风连衣裙,清新又减龄学院风连衣裙,轻松穿出少女感
- 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc
热门文章
- p6spy no suitable driver
- mybatis集成p6spy
- WARN - Got result of null when trying to get Boolean.
- 常见的代码漏洞——关键词
- Prisma(二)——Existing database
- hexo(matery)添加实时发布说说页面(Artitalk)
- Android 11.0 设置Camera2的相机拍照默认像素为1080P
- 【Mac】Adobe After Effects 2021 for Mac(视频特效制作软件) 中文直装版
- 人工智能入门书籍推荐
- FIPS 140-2 与FIPS 140-3的差异-3