spark实现基于邻居的协同过滤算法


请问一下寒老师,关于spark实现基于邻居的协同过滤算法的问题:

def findUserPairs(item_id,users_with_rating):
'''
对每个item,找到共同打分的user对
'''
for user1,user2 in combinations(users_with_rating,2):
return (user1[0],user2[0]),(user1[1],user2[1])

'''
处理数据,获得稀疏item-user矩阵:
item_id -> ((user_1,rating),(user2,rating))
'''
item_user_pairs = lines.map(parseVectorOnItem).groupByKey().map(
lambda p: sampleInteractions(p[0],p[1],500)).cache()

'''
获得2个用户所有的item-item对得分组合:
(user1_id,user2_id) -> [(rating1,rating2),
(rating1,rating2),
(rating1,rating2),
...]
'''
pairwise_users = item_user_pairs.filter(
lambda p: len(p[1]) > 1).map(
lambda p: findUserPairs(p[0],p[1])).groupByKey()

请问您一下,以上这几段代码中,
- item_user_pairs的是不是应该是这个样的格式:item_id -> [(user_1,rating1),(user2,rating2),(user3,rating3) ...]?
- 那么在findUserPairs的时候combinations(users_with_rating,2)得到的是所有对某个item进行打分的用户的两两进行的组合吗?格式是[((user1, rating1),(user2,rating2)), ((user1, rating1),(user3,rating3)), ((user2, rating2),(user3,rating3))......]
- 那么请问,在findUserPairs的for循环中是不是只是获取了第一个user对的组合就return,对于某一个item其他的user对,是不是都忽略了啊?

谢谢!
已邀请:

寒老师

赞同来自:


item_user_pairs没有(user3,rating3)和后面的部分,其实都是两个两个的,sparse的存储格式

要回复问题请先登录注册

返回顶部