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共同好友功能相关推荐

  1. QQ自动发送+@好友功能+tencent://功能

    1.取出全部标题 D2007版本 procedure TForm1.Button1Click(Sender: TObject); var   hCurrentWindow:HWnd;   szText ...

  2. hadoop找出QQ共同好友算法实现

    背景 A:B,C,D,E,F 表示A有bcdef好友 B:C,D,H,Y 以上可知道AB的共同好友为CD 思路: 1:我们先找出一个人被哪几个人共同拥有 测试数据: 2:第一阶段mr程序: packa ...

  3. 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: ...

  4. python+pyautogui+pyperclip实现QQ自动加好友功能

    python+pyautogui+pyperclip实现QQ自动加好友功能 在想自动加好友的时候有几个思路 1.抓包,调接口,结果发现解密挺费事的,pass 2.通过qq空间加好友功能,使用selen ...

  5. 仿 手机QQ 登录、注册、找回密码、好友列表、QQ状态等功能的实现

    仿 手机QQ 登录.注册.找回密码.好友列表.QQ状态等功能的实现 全文 图 + 代码 .... 福利!!!(QQ登录背景,过度页面背景) 1.加载过程中的背景 2.登录页面 ==1. 登录页面 布局 ...

  6. python批量添加qq好友_python实现QQ批量登录功能

    本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...

  7. 类似QQ的好友移动功能

    类似QQ的好友移动,左侧有一个列表,右侧有一个列表,可以左右移动,单击选择,双击移动,全部移动,过滤条件过滤左侧列表,点击提交后把右侧列表中的数据验证然后保存到数据库中.可以使用select但是sel ...

  8. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  9. android获取QQ昵称,【Ctrl.js】QQ读取好友昵称和QQ号源码

    [JavaScript] 纯文本查看 复制代码//--------------------------------------------------------------------------- ...

最新文章

  1. 整系数多项式的整除平移不变性
  2. 训练大规模语音数据集后的结果分析报告
  3. 处理UTF-8编码的不连续的字节流
  4. C#控制台程序生成文件分析
  5. three approaches to industrial experiences at cambridge
  6. linux下改变python的版本
  7. nginx 漏洞(适用于0.1.0-0.8.14)补丁
  8. pdf 深入理解kotlin协程_Kotlin协程实现原理:挂起与恢复
  9. matlab调用sh函数,Shell 函数定义与调用
  10. 剑指offer之正则表达式匹配
  11. c语言参数列表定义一个三维数组,C语言多维数组
  12. LeetCode刷题——392. 判断子序列
  13. 三维空间里点到直线的距离
  14. PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
  15. HTML5+CSS3教程1
  16. 32位汇编语言程序设计(钱晓捷) 高清完整
  17. 记一次奇怪的网络问题
  18. 用css实现文字抖动特效
  19. 斗地主 功能测试实战--需求分析,欢乐豆到底怎么输光的
  20. Win10系统下Eclipse+ADT+SDK配套安装(避免遇坑)

热门文章

  1. 关于latex中特殊符号,包括罗马数字及数学符号手册。
  2. 开源推荐! 一款开箱即用的电子签名组件
  3. 解决因d3dx9_30.dll丢失程序无法运行问题
  4. 恭喜活动MYSQL 5.7 OCP证书,我的OCP徽章
  5. python+django高考填报志愿综合参考系统vue
  6. Redis常用数据类型及使用场景
  7. 宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
  8. bulk es 删除_分布式ES:批量操作 bulk 之 create、index、update、delete(十八)
  9. 什么是1G/2G/3G/4G/5G
  10. 量化交易之(一)认识结构化行情