MapReduce学习之好友推荐
2016-01-11 16:53
411 查看
背景
在QQ,微博等社交软件中都会有好友推荐的功能,本案例将使用MapReduce实现一个简单的好友推荐的功能。想象一下,程序如何推荐好友呢?假设A和B为好友关系,B和C为好友关系,那么我们就假定A和C有好友关系。更复杂的情况,A和B、C均为好友关系,B、C和D均为好友关系,那么我们就假定A和D有好友关系。这样的关系可以称为二度关系。在实际过程中可以判断这种二度关系的数量进行好友推荐,或者进行三度关系的数量判断来进行推荐。
分析
数据如下形式: A B B C C D B E A D map阶段可以得到如下格式: Key:A Value:B D Key:B Value:C E Key:C Value:D reduce阶段可以将value进行笛卡尔积运算就可以得到二度关系。
代码实现
java实现如下
map 函数体: protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws java.io.IOException, InterruptedException { String line = value.toString(); String[] ss = line.split("\t"); context.write(new Text(ss[0]), new Text(ss[1])); context.write(new Text(ss[1]), new Text(ss[0])); }; reduce 函数体: protected void reduce(Text key, java.lang.Iterable<Text> value, Reducer<Text, Text, Text, Text>.Context context) throws java.io.IOException, InterruptedException { Set<String> set = new HashSet<String>(); for(Text v : value ){ set.add(v.toString()); } if(set.size() > 1){ for (Iterator j = set.iterator(); j.hasNext();) { String name = (String) j.next(); for (Iterator i = set.iterator(); i.hasNext();) { String other = (String) i.next(); if(!name.equals(other)){ context.write(new Text(name), new Text(other)); } } } } };
运行结果如下:
reduce阶段完成笛卡尔积运算的时候,可以用多种算法可以提高速度,这里只是简单的实现。
相关文章推荐
- 我为Net狂 ~ 社交平台系列小集合!
- 从今天起记录一下自己看过的书
- 最详细的Log4j使用教程
- ifup/ifdown ethX 和 ifconfig ehtX up/down的区别
- Spark优化:禁止应用程序将依赖的Jar包传到HDFS
- [Android Memory] 内存分析工具 MAT 的使用
- MySQL数据库的优化(二)
- 2015年度总结
- kafka安装
- 扛住100亿次请求 如何做一个“有把握”的春晚红包系统?
- xib正确创建可滑动的UIScrollView
- 2015 岁末 祝福 感恩
- 穷举递归和回溯算法终结篇
- Ubuntu下ceph集群配置共享RBD设备
- 兼容各浏览器的强制换行,不论中英文。。。。单词,长串等
- 中文排序哈哈
- 学习Sqlite3 (一)
- MySQL数据库的优化(一)
- 小明交换牌(C语言版)
- C# FTP常用操作