【问题标题】:Mahout running distributed recommendation gives empty fileMahout 运行分布式推荐给出空文件
【发布时间】:2014-09-04 08:04:12
【问题描述】:

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

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=输入/输入.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

【问题讨论】:

  • 你能把你正在使用的代码贴在这里吗?也许您使用的是无效的 DataModel...
  • 我不认为这是模型的问题。检查我的编辑。
  • 可能是用户3偏好不足,程序无法为他推荐?
  • 嗯,是的,就像您在文件中看到的那样,用户只有一个偏好。然而,即使对于 1 个事务,用户项目矩阵也应该有 1 个条目,并且与项目项目相似性矩阵相乘应该会给出一些结果。我不确定我是否完全理解内部是如何工作的。
  • @AbhiroopSarkar:您忘记投票/接受或对现有答案提供某种反馈。

标签: hadoop mahout recommendation-engine mahout-recommender


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多