Mahout运行分布式推荐给出空文件

时间:2014-09-04 08:04:12

标签: hadoop mahout recommendation-engine mahout-recommender

我正在阅读Mahout in Action一书并试用分布式推荐引擎示例。但我没有使用维基百科数据集,而是使用一个小数据集作为我的例子。

input.txt->

1,15
1,13
1,12
1,10
2,11
2,15
2,20
2,17
2,12
3,10

user.txt->

3

其中input.txt和user.txt的格式为user,item,input.txt表示用户过去购买的商品,user.txt代表当前购买

当我在hdfs中复制这两个文件并运行

  

hadoop jar mahout-core-0.5-job.jar \   org.apache.mahout.cf.taste.hadoop.item.RecommenderJob \   -Dmapred.input.dir = input / input.txt \   -Dmapred.output.dir = output --usersFile input / user.txt --booleanData

地图缩小正常运行。但是当我检查bin/hadoop fs -cat output/ part-r-00000

中的输出时

我找到一个空文件。

有人可以解释我出了什么问题吗? 如果我理解正确,推荐人工作应该已经构建了项目与项目相似度矩阵,将其与用户项目矩阵(来自user.txt)相乘并生成结果。

需要一些帮助理解。我在一个节点上使用Mahout 0.5和hadoop 1.2。我希望它不是版本兼容性问题。

修改

如果我将user.txt更改为

,我会得到答案
  

2

  

1

1 个答案:

答案 0 :(得分:1)

首先使用Mahout 0.9或当前的源码构建。 0.5很老了,过时了。我知道它已在本书中使用,但许多示例仍然适用于较新的代码。

其次,您的数据中很少发生共存。如果您想了解推荐人的工作方式,请尝试使用此博客post使用此类小型数据集很容易产生同步,这会导致空推荐。在帖子中有一个非常小的数据集,旨在产生一些recs但不会为所有用户生成recs。

第三,确保为所有项目和用户使用Mahout ID。这意味着用户x项矩阵中的行号和列号。对于项目ID,它们必须为0到项目数 - 减1,对于用户ID,它们必须为0到用户数量减去1。使用其他任何东西都会导致虚假的结果。几个Mahout 1.0 Spark作业已删除此限制,您可以使用任何唯一字符串。但是Hadoop mapreduce代码仍然需要这些ID