0

我正在阅读 Mahout in Action 这本书并尝试分布式推荐引擎示例。但是,我在示例中使用了一个小型数据集,而不是 Wikipedia 数据集。

输入.txt->

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

用户.txt->

3

其中 input.txt 和 user.txt 的格式为user,iteminput.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 输入/user.txt --booleanData

map reduce 运行正常。但是,当我检查输出时bin/hadoop fs -cat output/ part-r-00000

我找到一个空文件。

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

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

编辑

如果我将 user.txt 更改为

2

或者

1

4

1 回答 1

1

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

其次,您的数据中的共现很少。如果您想了解推荐器的工作原理,请尝试这篇博文使用如此小数据集很容易产生无共现,这将导致空推荐。在帖子中有一个非常小的数据集,旨在生成一些记录,但不会为所有用户生成记录。

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

于 2014-09-05T14:34:55.133 回答