spark好友推荐
来源:互联网 发布:数据安全管理规范 编辑:程序博客网 时间:2024/06/04 08:27
好友推荐:有好多推荐方式,比如根据兴趣爱好去推荐,根据朋友的盆友去推荐等等,这里不再赘述,这个比较经典的问题,大家肯定都知道吧,或许很多人指导用hadoop怎么去实现,这个问题如果用hadoop去实现,得用至少两次mapreduce去实现吧,这里先不去说明hadoop怎么去实现的,先看看数据,然后用spark去实现。
小明 老王 如花 林志玲
老王 小明 凤姐
如花 小明 李刚 凤姐
林志玲 小明 李刚 凤姐 郭美美
李刚 如花 凤姐 林志玲
郭美美 凤姐 林志玲
凤姐 如花 老王 林志玲 郭美美
先数据说明,数据是按照制表符分割的,第一个表示用户,其后表示该用户的好友。
下面介绍一种方法,就是根据好友的好友而不是自己好友的去推荐,可能会计算两个人在好友的关系中出现的次数等等。
如果出现的次数越高,他们两个人认识的可能性就会越高。
好了,代码献上:
“`
System.setProperty(“hadoop.home.dir”,”D:\hadoop\bin\winutils.exe”)
val conf = new SparkConf().setAppName(“friends”)
conf.setMaster(“local”)
val sc = new SparkContext( conf )
//如何求出间接朋友的关系
val rdd = sc.makeRDD( Array(
“小明\t老王\t如花\t林志玲”,
“老王\t小明\t凤姐”,
“如花\t小明\t李刚\t凤姐”,
“林志玲\t小明\t李刚\t凤姐\t郭美美”,
“李刚\t如花\t凤姐\t林志玲”,
“郭美美\t凤姐\t林志玲”,
“凤姐\t如花\t老王\t林志玲\t郭美美”
))
val res = rdd.map( line =>{
val pair = line.split(“\t”)
val friends = pair.slice( 1,pair.length )
( pair(0),friends)
})
val relation = res.flatMap{x => x._2.map( e =>( x._1,e ) )}
//用户好友之间的关系
val fof = relation.leftOuterJoin( relation ).map( x => ( x._2._1,x._2._2.getOrElse(“”) )).filter( x => x._1!= x._2)
val resverse = relation.map( x => x.swap ).union(relation).map( x =>(x,1)).distinct()
//过滤掉是直接好友的
val f = fof.map( x =>( x,1)).subtractByKey( resverse ).reduceByKey( + ).map( x =>( x._1._1,(x._1._2,x._2 )))
//求出给某个人推荐的人物列表,并且按照出现的次数排序从高到低
f.aggregateByKey(ArrayBuffer(String,Int))( :+, ++ ).mapValues( x =>
x.sortBy( -._2 )).map( x => x._1+”—>”+x._2.mkString(“\t”)).foreach( println( ) )
“`这只是我自己写这本地测试的,还有经过大量数据的测试性能,。
多地方坑内还:
要去优化。希望大家能给我指出更好的方法。实验结果如下:
小明—>(凤姐,3) (李刚,2) (郭美美,1)
如花—>(林志玲,3) (老王,2) (郭美美,1)
郭美美—>(小明,1) (李刚,1) (如花,1) (老王,1)
凤姐—>(小明,3)
林志玲—>(如花,3) (老王,2)
李刚—>(小明,2) (郭美美,1)
老王—>(林志玲,2) (如花,2) (郭美美,1)hadoop实现的版本后面奉上
- spark好友推荐
- Spark 好友推荐解决方案
- Hadoop/Spark推荐系统(一)——共同好友
- 好友推荐
- 好友推荐策略
- 好友精品文章推荐
- 二度好友推荐源码
- 推荐好友和共同好友sql
- MapReduce实现QQ好友推荐
- MapReduce学习之好友推荐
- 社交网络的好友推荐
- MapReduce实现QQ好友推荐
- mapreduce实现QQ好友推荐
- MapReduce实现QQ好友推荐
- Hadoop/MapReduce 好友推荐解决方案
- 好友推荐算法-基于关系的推荐
- Hadoop好友推荐系统-推荐结果查询
- 查询两个好友推荐信息好友信息的SQL语句
- 精度题
- Modern C++(四)左值与右值
- 标准AVR单片机模拟I2C总线的主机程序
- JAVA SSH ----Struts常见几个技术
- 卷积神经网络中的优化算法比较
- spark好友推荐
- MAC os 配置环境变量的方法
- FreeRTOS 任务通知
- 解决IAR中H文件不能打开的方法
- RYU 启动出现unsupported version 0x1. If possible, set the switch to use one of the versions[4]
- extern用法
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
- PAT乙级1024
- 温家宝:做人的基本原则(看完终身受益)