mapreduce程序案例4--查找QQ共同好友
需求:
查找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共同好友相关推荐
- 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 ...
- MapReduce应用案例6:二度好友发现
1.应用场景 二度好友发现在社交网络中大量使用,QQ.微博.微信.社交网站等经常会推荐添加好友,其依据就是用户之间的好友关系. 几个概念: 一度好友是你的好友 二度好友是好友的好友,二度好友发现是社交 ...
- MapReduce程序之序列化原理与Writable案例
[TOC] MapReduce程序之序列化原理与Writable案例 前言 在编写MapReduce程序时,我们会发现,对于MapReduce的输入输出数据(key-value),我们只能使用Hado ...
- MapReduce实战案例:发现共同好友
mapreduce原理 MapReduce是一种编程模型,用于大规模数据集的并行运算,其中包含 Map(映射) 和 Reduce(归约) 两个阶段. 接下来以最经典的 Word Count 案例进行解 ...
- 超详细MapReduce程序实现WordCount案例
一.案例准备 1.首先在本地创建两个文件,即文件A和文件B touch A B 2.在文件A和文件B中分别添加以下内容 A: China is my motherland I love China B ...
- mapreduce程序本地运行,单词统计案例
mapreduce程序本地运行单词统计案例,输入输出数据放在本地 集群模式运行:https://blog.csdn.net/weixin_43614067/article/details/108400 ...
- QQ小程序解决方法:您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以将小程序直接转发给QQ好友、空间、微信和朋友圈
提交QQ小程序,审核的时候,可能会被腾讯以如下理由拒绝审核: 您好,您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以 ...
- 大数据 - MapReduce编程案例 -BH3
MapReduce编程案例 用mapreduce解决问题的关键是确定key,只有key相同的结果才会到同一个reduce中进行处理 默认分区使用HashPartitoner,hashCode%redu ...
- Hadoop详解(三)——MapReduce原理和执行过程,远程Debug,Writable序列化接口,MapReduce程序编写
MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和Re ...
最新文章
- CheckBox控件
- 如何启动多个WebLogic托管服务器
- react笔记组件属性传递机制(四)
- python 折线图_Python 编程一次画三种图:柱状图、散点图、折线图
- 死锁的代码产生及必要条件与预防
- flutter offset_用Flutter实现58App的首页
- 计算机数据结构模拟试题,十套计算机数据结构试题及答案.doc
- 微型计算机原理与接口技术知识点
- PB语言实现反射机制
- 典型ARM嵌入式Linux设备启动流程-S3C2440,S5PV210,AM3352x
- csharp进阶练习题:谜机 - 第1部分:插板【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
- Java(汉字/拼音/简繁)转换, 文字分割, 关键字提取, 人名, 音译, 地名识别等等
- ironbot智能编程机器人_小小工程师启蒙教练就选IronBot机器人套件
- postgresql 执行sql文件
- RAID 1 的优点缺点和应用场景
- 蚁群算法解决车间调度问题
- css盒子遮罩层显示与隐藏
- 防火门监控系统在智能建筑消防的重要性及应用介绍
- 英文内容如何进行翻译
- 深入分析:Onliner SpamBot7.11亿电邮账号泄露事件