我想做一个电影推荐系统,一直在关注这个网站。链接
def count_ratings_users_freq(self, user_id, values):
"""
For each user, emit a row containing their "postings"
(item,rating pairs)
Also emit user rating sum and count for use later steps.
output:
userid, number of movie rated by user, rating number count, (movieid, movie rating)
17 1,3,(70,3)
35 1,1,(21,1)
49 3,7,(19,2 21,1 70,4)
87 2,3,(19,1 21,2)
98 1,2,(19,2)
"""
item_count = 0
item_sum = 0
final = []
for item_id, rating in values:
item_count += 1
item_sum += rating
final.append((item_id, rating))
yield user_id, (item_count, item_sum, final)
有没有可能用hadoopmap和reduce把上面的代码翻译成java? userid
作为关键 no. movie rated by user, rating number count, (movieid, movie ratings)
作为价值。谢谢您!
1条答案
按热度按时间uyhoqukh1#
是的,你可以把它转换成Map缩小程序。
Map器逻辑:
假设输入的格式为(user id,movie id,movie rating)(例如17,70,3),您可以用逗号(,)分割每一行,并以“user id”作为键,以(movie id,movie rating)作为值。例如,对于记录:(17,70,3),可以发出key:(17)和value:(70,3)
减速器逻辑:
您将保留3个变量:moviecount(整数)、movieratingcount(整数)、movievalues(字符串)。
对于每个值,您需要解析该值并获得“电影分级”。例如,对于值(70,3),您将解析电影分级=3。
对于每个有效记录,您将增加moviecount。您将把解析后的“movie rating”添加到“movieratingcount”中,并将值附加到“movievalues”字符串中。
您将获得所需的输出。
下面是实现这一点的一段代码:
对于输入:
我得到了结果: