以下是博客的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)

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

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实例之寻找博客中共同好友相关推荐

  1. MySQL DQL语句基础(随堂博客)

    MySQL DQL语句基础(随堂博客) 数据准备 查询数据 条件查询 本博客为课程随堂博客作业,个人技术有限,表达略显抽象,望请见谅 数据库在执行DQL的时候,不会都数据进行改动,仅仅是看.只要把服务 ...

  2. 这可能是最全的在Ubunto安装idea,maven以及进行Wordcount实例的一个博客了

    文章目录 idea安装: 1.下载安装包并移动 2.解压 3.赋权限 4.启动idea 5.安装 安装maven 1.解压maven包 2.设置权限: 3.配置变量 4.验证是否存在 5.修改sett ...

  3. CSDN博客添加QQ好友按钮

    1.进入QQ推广网站 选择推广工具--选择组件样式及提示语 2.复制生成的代码(如图1)到博客栏目 3.会提示如下错误 4.简单,选一张自己喜欢的图片上传到CSDN博客中,注意在markdown编辑模 ...

  4. 博客中gitalk最新评论的获取 github api使用

    博客中,对于网友的评论以及每篇文章的评论数还是很重要的.但是基于静态的页面想要存储动态的评论数据是比较难的,一般博客主题中都内置了评论插件,但是博客主题中对于最新评论的支持显示还是很少的,至少目前我是 ...

  5. 5年前我在博客中写的三目运算符的空指针问题,终于被阿里巴巴开发手册收录了。...

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 267篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 最近,阿里巴巴Java ...

  6. lighthouse_Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse

    lighthouse by Oliver Nybroe 由Oliver Nybroe Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse (GraphQL in ...

  7. hexo博客中添加音乐播放器

    1. 简介 本篇文章是介绍基于网易云iframe插件在hexo博客中加装音乐播放器的方法,无需安装任何额外插件. 2.安装步骤 在网易云音乐中打开你想要插入的音乐页面,点击 生成外联播放器. 在网页中 ...

  8. 在博客中加入“花絮”效果

    在博客中加入Snap Shots Snap Shots表示"花絮"的意思,在博客中可以使用Snap Shots来添加"花絮"效果. 先演示一遍效果,看是否能用: ...

  9. 如何将视频网站中的视频插入到博客中

    如何将视频网站中的视频插入到博客中 拿优酷网的视频(http://v.youku.com/v_show/id_XMjA2NTA3NzY0.html)为例,操作方法如下: 1.找到该视频下方的分享按钮, ...

最新文章

  1. Java Swing 探索(一)LayoutManager
  2. [java]处理utf-8 bom字符串的bom头
  3. 软件使用 excel
  4. 公众号质量改进调查问卷
  5. 10个人里有几个大学生?
  6. 设计模式——中介者模式
  7. oracle oic配置,Oracle数据库 client配置
  8. 字符串处理 —— 单模式匹配
  9. AndroidのTextView之CompoundDrawable那些坑
  10. CTFHUB技能树-Misc-流量分析-ICMP
  11. 【转】Leopard 安装教程
  12. 三层结构对多语言的支持
  13. mysql重启服务命令_重启mysql命令
  14. python安装apk到手机_python自动安装apk文件
  15. Anaconda中spyder5闪退如何解决
  16. 如何自己开发一个小程序?
  17. iOS线下分享《RunLoop》by 孙源@sunnyxx
  18. 解决Openwrt安装插件提示一下错误的办法
  19. AJAX技术学院风连衣裙,清新又减龄学院风连衣裙,轻松穿出少女感
  20. 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc

热门文章

  1. p6spy no suitable driver
  2. mybatis集成p6spy
  3. WARN - Got result of null when trying to get Boolean.
  4. 常见的代码漏洞——关键词
  5. Prisma(二)——Existing database
  6. hexo(matery)添加实时发布说说页面(Artitalk)
  7. Android 11.0 设置Camera2的相机拍照默认像素为1080P
  8. 【Mac】Adobe After Effects 2021 for Mac(视频特效制作软件) 中文直装版
  9. 人工智能入门书籍推荐
  10. FIPS 140-2 与FIPS 140-3的差异-3