文章目录
写在前面
你们好我是啊晨 ,一个大数据分享者兼一个努力成为大垃圾的小垃圾
本章介绍,使用spark计算共同好友,相信看这篇文章之前都有了解做过MapReduce的共同好友,文章后会有MapReduce的方法,大家自行比较一下哈。
如有其它需要请阅读我的其它大数据文章,谢谢
中间有什么问题请留言,请珍惜现在的时间:
描述
如网站有如下关系数据:
friends.txt
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,D,F,E,O
每行数据以冒号为分隔符:
1.冒号左边是网站的一个用户A;
2.冒号右边是网站A的好友列表(各好友间以逗号为分隔符);
现在需要对网站的用户进行分析,找出那些用户两两之间有共同好友,以及他俩的共同好友都有那些人。
如:A、B两个用户拥有共同好友C和E;
(F-H,D,O,A,C,E)
(A-F,B,D,O,C,E)
(B-H,A,C,E)
(F-I,O,A)
(G-O,A)
(B-C,A)
(D-F,A,E)
(B-M,E)
(C-G,F,D,A)
....
计算
完整代码如下:
package spark
import org.apache.spark.rdd.RDD
import org.apache.spark.{
SparkConf, SparkContext}
//共同好友聚合
object CommonFriend {
def main(args: Array[String]): Unit = {
//conf
val conf = new SparkConf()
.setMaster("local[*]")
.setAppName(this.getClass.getName)
//sc
val sc = new SparkContext(conf)
//读取数据
val source: RDD[String] = sc.textFile("file:///E:\\work\\friends.txt")
//处理数据
val friendAndUser: RDD[(String, List[String])] = source.flatMap(line => {
//按照:进行切分
val infos: Array[String] = line.