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,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,E
A-C : D,F
map中逻辑如下:
/*** 入参:* A:B,C,D,F,E,O* B:A,C,E,K* ....* ....* A出参:* A-B:C,D,F,E,O* A-C:B,D,F,E,O* .....* B出参:* A-B:C,E,K* B-C:A,E,K* ...* 分析:* 1,要找到互为好友的两个人之间的好友是谁,首先找出A的好友有谁,以及除它之外还有谁*,2,要使互为好友的两个人在maptask中处理完成之后汇聚到reducetask,就必须使key相同,可以根据hashcode来排顺序*/
public class QQFriendMapper extends Mapper<LongWritable,Text,Text,Text> {Text keyText = new Text();Text valueText = new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] allFriends = line.split(":");String userMain = allFriends[0];String userOther = allFriends[1];System.out.println("userMain======="+userMain);System.out.println("userOther======="+userOther);String[] friends = userOther.split(",");List<String> friendsList = Arrays.asList(friends);String keyString = "";for (String friend : friends){if (userMain.hashCode()<friend.hashCode()){//排列key的顺序keyString = userMain +"-"+ friend +":";}else {keyString = friend +"-"+ userMain +":";}String valueString = "";for (String valueStr : friendsList){if (!valueStr.equals(friend)){valueString += valueStr+",";}}keyText.set(keyString);valueText.set(valueString);System.out.println("keyString=========="+keyString);System.out.println("valueString=========="+valueString);context.write(keyText,valueText);}}
}
reduce中逻辑如下:
/*** 入参:* <A-B:,C,D,F,E,O> <A-B:,C,E,K>* .....** 出参:* A-B: C,E* .....* 分析:有的好友可能是单向好友(即迭代器中只有一组数据),需要过滤掉*/
public class QQFriendReduce extends Reducer<Text,Text,Text,Text> {Text valueText = new Text();@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {System.out.println(key.toString());Iterator<Text> iterator = values.iterator();Text groupA = new Text();Text groupB = new Text();int i = 1;//过滤标识,互为好友的两个人,迭代器中只有两个,处理时,只处理i==3的数据while (iterator.hasNext()){if (i == 2){groupB.set(iterator.next());System.out.println("groupB====="+groupB);}else if (i == 1){groupA.set(iterator.next());System.out.println("groupA========"+groupA);}i++;}System.out.println(groupA);System.out.println(groupB);System.out.println("i============"+i);if (i == 3){String[] groupStrsA = groupA.toString().split(",");String[] groupStrsB = groupB.toString().split(",");String equalFriend = "";for (String strA : groupStrsA){for (String strB : groupStrsB){if (strA.equals(strB)){equalFriend += strA + ",";}}}System.out.println(groupA);System.out.println(groupB);System.out.println("equalFriend========="+equalFriend);if (!equalFriend.equals("") && equalFriend != null){equalFriend = equalFriend.substring(0,equalFriend.length()-1);}valueText.set(equalFriend);context.write(key,valueText);}}
}
HADOOP实现查找QQ共同好友功能相关推荐
- QQ自动发送+@好友功能+tencent://功能
1.取出全部标题 D2007版本 procedure TForm1.Button1Click(Sender: TObject); var hCurrentWindow:HWnd; szText ...
- hadoop找出QQ共同好友算法实现
背景 A:B,C,D,E,F 表示A有bcdef好友 B:C,D,H,Y 以上可知道AB的共同好友为CD 思路: 1:我们先找出一个人被哪几个人共同拥有 测试数据: 2:第一阶段mr程序: packa ...
- 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: ...
- python+pyautogui+pyperclip实现QQ自动加好友功能
python+pyautogui+pyperclip实现QQ自动加好友功能 在想自动加好友的时候有几个思路 1.抓包,调接口,结果发现解密挺费事的,pass 2.通过qq空间加好友功能,使用selen ...
- 仿 手机QQ 登录、注册、找回密码、好友列表、QQ状态等功能的实现
仿 手机QQ 登录.注册.找回密码.好友列表.QQ状态等功能的实现 全文 图 + 代码 .... 福利!!!(QQ登录背景,过度页面背景) 1.加载过程中的背景 2.登录页面 ==1. 登录页面 布局 ...
- python批量添加qq好友_python实现QQ批量登录功能
本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...
- 类似QQ的好友移动功能
类似QQ的好友移动,左侧有一个列表,右侧有一个列表,可以左右移动,单击选择,双击移动,全部移动,过滤条件过滤左侧列表,点击提交后把右侧列表中的数据验证然后保存到数据库中.可以使用select但是sel ...
- python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
- android获取QQ昵称,【Ctrl.js】QQ读取好友昵称和QQ号源码
[JavaScript] 纯文本查看 复制代码//--------------------------------------------------------------------------- ...
最新文章
- 整系数多项式的整除平移不变性
- 训练大规模语音数据集后的结果分析报告
- 处理UTF-8编码的不连续的字节流
- C#控制台程序生成文件分析
- three approaches to industrial experiences at cambridge
- linux下改变python的版本
- nginx 漏洞(适用于0.1.0-0.8.14)补丁
- pdf 深入理解kotlin协程_Kotlin协程实现原理:挂起与恢复
- matlab调用sh函数,Shell 函数定义与调用
- 剑指offer之正则表达式匹配
- c语言参数列表定义一个三维数组,C语言多维数组
- LeetCode刷题——392. 判断子序列
- 三维空间里点到直线的距离
- PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
- HTML5+CSS3教程1
- 32位汇编语言程序设计(钱晓捷) 高清完整
- 记一次奇怪的网络问题
- 用css实现文字抖动特效
- 斗地主 功能测试实战--需求分析,欢乐豆到底怎么输光的
- Win10系统下Eclipse+ADT+SDK配套安装(避免遇坑)
热门文章
- 关于latex中特殊符号,包括罗马数字及数学符号手册。
- 开源推荐! 一款开箱即用的电子签名组件
- 解决因d3dx9_30.dll丢失程序无法运行问题
- 恭喜活动MYSQL 5.7 OCP证书,我的OCP徽章
- python+django高考填报志愿综合参考系统vue
- Redis常用数据类型及使用场景
- 宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
- bulk es 删除_分布式ES:批量操作 bulk 之 create、index、update、delete(十八)
- 什么是1G/2G/3G/4G/5G
- 量化交易之(一)认识结构化行情