• 综合主站
  • RHadoop实践系列之三 R实现MapReduce的协同过滤算法

好文。

实现推荐算法时,通常感觉 which() 这一步是最慢的,有没有优化的空间呢?试了很多其他方式,效果都不好。
[未知用户] 你用的是文章中的方法,还是自己实现的基于距离的算法?
R本地实现,还是MapReduce实现?

which的操作在哪一步?
通过矩阵计算,可以省略一些可能用到which的地方。
[未知用户] 能演示一下直接读hadoop上的数据吗?而不是从本地读取之后再转化为hdfs的格式。
hi @michael_DYM,

直接读hadoop上的数据,可用from.dfs()函数。
from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")

参考前一篇文章:
http://cos.name/2013/03/rhadoop2-rhadoop/
5 天 后
STEP 1 #3 left.input=step2.mr is not found
[未知用户] 好像是排版时丢了一些代码,我马上补上。
[未知用户] 已经修复,再试一下。
1 个月 后
运行2中计算推荐结果部分的代码时,出现:错误于head(topn, num) : 找不到对象'topn'的问题,请问这个是错在哪里?
[未知用户] 你好,非常感谢你的提问,请原谅我的疏忽,排版的时候,可能丢了一些代码。我已经补上了,请再试一下。

15 天 后
from.dfs(
equijoin(left.input = to.dfs(keyval(1:11, 1:10)),
right.input = to.dfs(keyval(1:10, 1:10^2)),
map.left=function(k,v){
keyval(k,v)
},
map.right=function(k,v){
keyval(k,v)
},
outer = c("full")
))


貌似有一个 Bug~ 关于返回的是 NA 的处理上——有问题~ 请大牛帮忙讲解讲解!
[未知用户] NA的处理?是什么bug?
你能把运行的日志,一起打印出来吗?
1 个月 后
本地R语言实现代码中 这句总是报错

topn<-data.frame(user=rep(udata$user[1],length(idx)),item=items[idx],val=r[idx])
topn0),]
20 天 后
数据量比较大的时候,大概30万,跑本地实现的时候就会报错:
> co<-cooccurrence(data)
Error in m$x : $ operator is invalid for atomic vectors

少量数据就不会报错,请教下大概是什么原因呢?
[未知用户] topn<-data.frame(user=rep(udata$user[1],length(idx)),item=items[idx],val=r[idx])
topn0),]

把下面的topn0),]删除就行了。
7 天 后
[未知用户] 一行一行执行cooccurrence函数里面的语句,把错误具体定位。
4 个月 后
对RHADOOP感兴趣,简单用过JAVA的MapReduce,有些疑问请教一下
第一步的reduce动作
reduce=function(k,v){
m<-merge(v,v)
keyval(m$x,m$y)
}
如果这个v巨大无比,比如有1亿行,内存装不下了,RHADOOP是否会自动处理?
Java中的Reduce是做成一个iterators,数据是一行行出来的,但这句merge(v,v)看起来是把整个向量v取出来处理了(否则没法做个交叉乘法吧)。

类似的情况还很多,比如和第二步的map动作
map = function(k, v) {
d<-data.frame(k,v)
d2<-ddply(d,.(k,v),count)
key<-d2$k
val<-d2
keyval(key,val)
}
count操作也是针对集合d进行,如果这个d有1亿行会怎样?内存不会爆吗?RHADOOP会自动把这件事并行到集群的节点机上吗?
Java中的Map动作是一行行把k,v送进来的,当然也没法在Map里直接count了(大数据count本身就会是一个不太简单的MapReduce任务),不过了不会有内存爆的问题。
如果RHADOOP能处理这些大数据问题,那似乎不需要MapReduce,直接用R就可以了,MapReduce那个k经常是多余的。
2 年 后
你好,
本文中推荐的原始数据是不同用户与不同物品评分关系数据。文中讲到:“基于物品的协同过滤算法,是给用户推荐和他之前喜欢的物品相似的物品。”,如何根据用户与物品评分计算物品之间的相似度?在我看来这个实验应该是基于用户的协同过滤算法实现,不是基于物品。
如有错误,请指正,信息