电影推荐的MapReduce Jaccard相似性计算

电影推荐的MapReduce Jaccard相似性计算,mapreduce,reduce,recommendation-engine,Mapreduce,Reduce,Recommendation Engine,我正在做一个分布式系统的考试,我试图解决去年考试中的一个MapReduce问题。但是我很难弄清楚我将创建什么MR函数。本练习是关于处理包含{userID,movieID,timestamp}的数据集。我们想建立一个服务,在制作一部电影后向用户推荐一部电影。 用户(id)已在元组中看到电影(id)。要推荐另一部电影,您需要计算Jaccard相似性: 雅卡(X,Y)=N/(Nx+Ny-N),其中: Nx=观看电影X的用户数 Ny=观看电影的用户数量Y N=同时观看电影X和Y的用户数 伪代码中的M

我正在做一个分布式系统的考试,我试图解决去年考试中的一个MapReduce问题。但是我很难弄清楚我将创建什么MR函数。本练习是关于处理包含{userID,movieID,timestamp}的数据集。我们想建立一个服务,在制作一部电影后向用户推荐一部电影。 用户(id)已在元组中看到电影(id)。要推荐另一部电影,您需要计算Jaccard相似性:

雅卡(X,Y)=N/(Nx+Ny-N),其中:

  • Nx=观看电影X的用户数
  • Ny=观看电影的用户数量Y
  • N=同时观看电影X和Y的用户数
伪代码中的MR函数必须如下所示:

MAP(key1, value1):
  // Do stuff about<key1,value1>
  emit(key2,value2)


REDUCE(key2,list(value2)):
  //do stuff about <key2, list(value2)>
  emit(key3,value3)

我不知道下一步该怎么办。我也不明白MR背后的逻辑,第二个MR会得到什么作为输入。例如,电影ID将保持不变,还是将获得数据集中的下一个电影ID?提前感谢您的解释。如果您想更好地解释练习的数据,请询问。

映射/还原转换(map)的
部分将每个输入记录映射为(键->值)对

输入记录->
x
地图功能->
f
输入记录上映射函数的输出->
f(x)

在您的具体示例中,您正在通过丢弃时间戳将{userID,movieID,timestamp}的元组转换为键值映射(movieID->userID)

map/reduce的
reduce
部分获取您从上面创建的每个键值映射,并执行聚合功能(reduce)。由于一个
的所有数据都需要位于一个节点上才能执行准确的聚合计算,因此特定
的值将移动到负责该
的特定节点。这就是为什么
reduce
将输入作为(key->List(value))或您的示例(movieId->List(userid))。因此,对于每个
reduce
调用,
键将不同

对于每个输入键,
reduce
函数的输出将是唯一的(键->聚合\计算(值))。比如你的情况,

Movie (Id)              Number of Users
Star Wars               50
John Wick               32
Fifty Shades of Grey    9000
...
Movie (Id)              Number of Users
Star Wars               50
John Wick               32
Fifty Shades of Grey    9000
...