需求:

查找QQ共同好友:

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

思路:

找出key为B,C,D,F,E,O的共同好友为A,然后reduce,去重,获取所有QQ的共同好友列表;

package application.mapreduce;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.hadoop.io.WritableComparable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;/*** @author: wtl* @License: (C) Copyright 2020, wtl Corporation Limited.* @Contact: 1050100468@qq.com* @Date: 2020-10-11 18:16* @Version: 1.0* @Description:*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Friend implements WritableComparable<Friend> {private String friend;@Overridepublic int compareTo(Friend o) {String[] fs = friend.split("_");String[] f2s = o.friend.split("_");Set<String> fSet = new TreeSet<>(Arrays.asList(fs));Set<String> f2Set = new TreeSet<>(Arrays.asList(f2s));StringBuilder stringBuilderF1 = new StringBuilder();StringBuilder stringBuilderF2 = new StringBuilder();fSet.forEach(stringBuilderF1::append);f2Set.forEach(stringBuilderF2::append);return stringBuilderF1.toString().compareTo(stringBuilderF2.toString());}@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF(friend);}@Overridepublic void readFields(DataInput dataInput) throws IOException {friend = dataInput.readUTF();}
}
package application.mapreduce;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** @author: wtl* @License: (C) Copyright 2020, wtl Corporation Limited.* @Contact: 1050100468@qq.com* @Date: 2020-10-11 18:15* @Version: 1.0* @Description:*/
public class FriendsMapper extends Mapper<LongWritable, Text,Friend,Text> {private Text text = new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] fields = line.split(":");String friend = fields[0];String[] persons = fields[1].split(",");text.set(friend);for (int i = 0; i < persons.length; i++) {for (int j=i+1;j< persons.length;j++){Friend build = Friend.builder().friend(persons[i] + "_" + persons[j]).build();context.write(build,text);}}}
}
package application.mapreduce;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;
import java.util.Set;
import java.util.TreeSet;/*** @author: wtl* @License: (C) Copyright 2020, wtl Corporation Limited.* @Contact: 1050100468@qq.com* @Date: 2020-10-11 18:36* @Version: 1.0* @Description:*/
public class FriendsReducer extends Reducer<Friend, Text,Friend,Text> {private Text text = new Text();@Overrideprotected void reduce(Friend key, Iterable<Text> values, Context context) throws IOException, InterruptedException {Set<String> set = new TreeSet<>();for (Text value : values){set.add(value.toString());}StringBuilder stringBuilder = new StringBuilder();set.forEach(s -> {stringBuilder.append(s).append(",");});text.set(stringBuilder.substring(0,stringBuilder.length() - 1));context.write(key,text);}
}

输出结果:

Friend(friend=A_B)  F
Friend(friend=A_C) B,F,G,H,K
Friend(friend=A_D) C,F,G,H,K
Friend(friend=A_E) B,D,F,G,H
Friend(friend=A_F) C,D,G
Friend(friend=A_H) O
Friend(friend=A_I) C,O
Friend(friend=A_J) O
Friend(friend=A_K) B
Friend(friend=A_L) D
Friend(friend=A_M) F
Friend(friend=A_O) F,H,I
Friend(friend=B_C) A,E,F
Friend(friend=B_D) A,E,F
Friend(friend=B_E) A,F
Friend(friend=B_F) A
Friend(friend=B_L) E
Friend(friend=B_M) E,F
Friend(friend=B_O) A,F,J
Friend(friend=C_D) A,E,F,G,H,K
Friend(friend=C_E) A,B,F,G,H
Friend(friend=C_F) A,G
Friend(friend=C_K) B
Friend(friend=C_L) E
Friend(friend=C_M) E,F
Friend(friend=C_O) A,F,H
Friend(friend=D_E) A,F,G,H,L
Friend(friend=D_F) A,C,G,L
Friend(friend=D_I) C
Friend(friend=D_L) E
Friend(friend=D_M) E,F
Friend(friend=D_O) A,F,H
Friend(friend=F_E) A,D,G,L,M
Friend(friend=E_G) M
Friend(friend=E_K) B
Friend(friend=E_L) D
Friend(friend=E_M) F
Friend(friend=E_O) A,F,H
Friend(friend=F_G) M
Friend(friend=F_I) C
Friend(friend=F_L) D
Friend(friend=F_O) A
Friend(friend=H_I) O
Friend(friend=H_J) O
Friend(friend=I_J) O
Friend(friend=M_L) E
Friend(friend=O_M) F

mapreduce程序案例4--查找QQ共同好友相关推荐

  1. HADOOP实现查找QQ共同好友功能

    HADOOP实现查找QQ共同好友功能 需求: 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 ...

  2. MapReduce应用案例6:二度好友发现

    1.应用场景 二度好友发现在社交网络中大量使用,QQ.微博.微信.社交网站等经常会推荐添加好友,其依据就是用户之间的好友关系. 几个概念: 一度好友是你的好友 二度好友是好友的好友,二度好友发现是社交 ...

  3. MapReduce程序之序列化原理与Writable案例

    [TOC] MapReduce程序之序列化原理与Writable案例 前言 在编写MapReduce程序时,我们会发现,对于MapReduce的输入输出数据(key-value),我们只能使用Hado ...

  4. MapReduce实战案例:发现共同好友

    mapreduce原理 MapReduce是一种编程模型,用于大规模数据集的并行运算,其中包含 Map(映射) 和 Reduce(归约) 两个阶段. 接下来以最经典的 Word Count 案例进行解 ...

  5. 超详细MapReduce程序实现WordCount案例

    一.案例准备 1.首先在本地创建两个文件,即文件A和文件B touch A B 2.在文件A和文件B中分别添加以下内容 A: China is my motherland I love China B ...

  6. mapreduce程序本地运行,单词统计案例

    mapreduce程序本地运行单词统计案例,输入输出数据放在本地 集群模式运行:https://blog.csdn.net/weixin_43614067/article/details/108400 ...

  7. QQ小程序解决方法:您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以将小程序直接转发给QQ好友、空间、微信和朋友圈

    提交QQ小程序,审核的时候,可能会被腾讯以如下理由拒绝审核: 您好,您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以 ...

  8. 大数据 - MapReduce编程案例 -BH3

    MapReduce编程案例 用mapreduce解决问题的关键是确定key,只有key相同的结果才会到同一个reduce中进行处理 默认分区使用HashPartitoner,hashCode%redu ...

  9. Hadoop详解(三)——MapReduce原理和执行过程,远程Debug,Writable序列化接口,MapReduce程序编写

    MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和Re ...

最新文章

  1. CheckBox控件
  2. 如何启动多个WebLogic托管服务器
  3. react笔记组件属性传递机制(四)
  4. python 折线图_Python 编程一次画三种图:柱状图、散点图、折线图
  5. 死锁的代码产生及必要条件与预防
  6. flutter offset_用Flutter实现58App的首页
  7. 计算机数据结构模拟试题,十套计算机数据结构试题及答案.doc
  8. 微型计算机原理与接口技术知识点
  9. PB语言实现反射机制
  10. 典型ARM嵌入式Linux设备启动流程-S3C2440,S5PV210,AM3352x
  11. csharp进阶练习题:谜机 - 第1部分:插板【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  12. Java(汉字/拼音/简繁)转换, 文字分割, 关键字提取, 人名, 音译, 地名识别等等
  13. ironbot智能编程机器人_小小工程师启蒙教练就选IronBot机器人套件
  14. postgresql 执行sql文件
  15. RAID 1 的优点缺点和应用场景
  16. 蚁群算法解决车间调度问题
  17. css盒子遮罩层显示与隐藏
  18. 防火门监控系统在智能建筑消防的重要性及应用介绍
  19. 英文内容如何进行翻译
  20. 深入分析:Onliner SpamBot7.11亿电邮账号泄露事件

热门文章

  1. html5及CSS的学习3
  2. 华为C8650刷入Recovery花屏问题的解决
  3. VT系列二:检测是否支持虚拟化
  4. 湘潭大学本科学生选课基本常识
  5. BSI TR-03110
  6. Table 表格,dl dt dd 标签
  7. mysql truncate命令
  8. 官网下载 Mysql 连接驱动jar包
  9. 在Word中用快捷键转换英文字母大小写
  10. 保存excel筛选后的内容