- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在阅读 Mahout in Action 一书并试用分布式推荐引擎示例。但是我在示例中使用了一个小型数据集,而不是维基百科数据集。
输入.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,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
map reduce 运行正常。但是,当我检查 bin/hadoop fs -cat output/中的输出时
部分-r-00000
我找到了一个空文件。
谁能给我解释一下这是怎么回事?如果我理解正确的话,Recommender Job 应该已经构建了一个项目到项目相似度矩阵,将它与用户-项目矩阵(来自 user.txt)相乘并产生结果。
需要一些帮助来理解。我在单个节点上使用 Mahout 0.5 和 hadoop 1.2。希望不是版本兼容性的问题。
编辑
如果我将 user.txt 更改为
,我会得到答案2
或
1
最佳答案
首先使用 Mahout 0.9 或当前源代码构建。 0.5 非常陈旧和过时。我知道它在书中使用过,但许多示例仍然适用于更新的代码。
其次,您的数据中很少同时出现。如果您想了解推荐系统的工作原理,请尝试此博客 post使用如此小的数据集很容易产生无共现,这将导致空的推荐。帖子中有一个非常小的数据集,旨在生成一些推荐但不会为所有用户生成推荐。
第三,确保对所有项目和用户使用 Mahout ID。这意味着用户 x 项目矩阵中的行号和列号。对于项目 ID,它们必须是 0 到项目数减一,对于用户 ID,它们必须是 0 到用户数减一。使用其他任何东西都会导致虚假结果。对于您可以在其中使用任何唯一字符串的多个 Mahout 1.0 Spark 作业,此限制已被删除。但是 Hadoop mapreduce 代码仍然需要这些 ID
关于hadoop - Mahout 运行分布式推荐给出空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660265/
我是一名优秀的程序员,十分优秀!