Hadoop/Spark推荐系统(一)——共同好友

与二度好友的区别,参见《Hadoop/Spark推荐系统(四)——推荐链接(二度好友)》部分

###输入

mapper-input: #好友关系是对称的,整个数据的关系边是偶数
(u1,[f1,f2,f3])
(u2,[f2,f3])
(f1,[u1,f3])
(f2,[u1,u2])
(f3,[u1,u2,f1])
###mapper-output
将一条用户的好友列表数据,拆成这个用户每个好友对为key的表示形式(key的表示字母或数字有序),value依然为好友里列表形式,共12组
([f1,u1],[f1,f2,f3])
([f2,u1],[f1,f2,f3])
([f3,u1],[f1,f2,f3])
([f2,u2],[f2,f3])
([f3,u2],[f2,f3])
([f1,u1],[u1,f3])
([f1,f3],[u1,f3])
([f2,u1],[u1,u2])
([f2,u2],[u1,u2])
([f3,u1],[u1,u2,f1])
([f3,u2],[u1,u2,f1])
([f3,f1],[u1,u2,f1])
###shuffle-output
依照对称性,key相同的合并,数量正好减少一半,为6组
([f1,u1],[f1,f2,f3],[u1,f3])
([f2,u1],[f1,f2,f3],[u1,u2])
([f3,u1],[f1,f2,f3],[u1,u2,f1])
([f2,u2],[f2,f3],[u1,u2])
([f3,u2],[f2,f3],[u1,u2,f1])
([f1,f3],[u1,f3],[u1,u2,f1])
###reduce-output
找出value里的两个list里重复的元素,即为共同好友
([f1,u1],[f3])
([f2,u1],[])
([f3,u1],[f1])
([f2,u2],[])
([f3,u2],[])
([f1,f3],[u1])

##MR版本

map(key,value){
	reduceValue=(<friend_1><friend_2>...<friend_N>)
	foreach friend in (<friend_1><friend_2>...<friend_N>){
		reduceKey=buildSortedKey(person,friend)
		emit(reducerKey,reducerValue);
	}
}

reduce(key,value){
  outputValue=intersection(List_1,List_2,...,List_M)
  emit(key,outputCalue);
}

##Spark版本

map(P,{F_1,F_2,...,F_n}){
	friends={F_1,F_2,...,F_N};
	for(f:friends){
		key = buildSortedTuple(P,f);
		emit(key,friends);
	}
}

reduce(key,values){
	commonFriends=intersection(values);
	emit(key,friends)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值