mahout运行分布式推荐会产生空文件

gpfsuwkq  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(419)

我正在阅读mahout in action手册并尝试分布式推荐引擎示例。但是我用一个小的数据集来代替维基百科的数据集。
输入.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
Map运行正常。但是当我检查输出时 bin/hadoop fs -cat output/ part-r-00000 我发现一个空文件。
有人能告诉我怎么了吗?如果我能正确理解推荐者的工作应该建立一个项目到项目的相似性矩阵,将它与用户项目矩阵相乘(来自user.txt)并产生结果。
需要一些帮助来理解。我在一个节点上使用mahout 0.5和hadoop1.2。我希望这不是版本兼容性的问题。
编辑
如果将user.txt改为
2

1

xeufq47z

xeufq47z1#

首先使用mahout 0.9或当前的源代码构建。0.5已经过时了。我知道这本书中使用了它,但许多示例仍然可以使用较新的代码。
第二,你的数据中很少有共同点。如果你想了解推荐者是如何工作的,那么试试这篇博客文章吧,使用这样的小数据集很容易就不会产生协同现象,这将导致空的推荐。在post中有一个非常小的数据集,用于生成一些rec,但不会为所有用户生成rec。
第三,确保对所有项目和用户使用mahout id。这意味着用户x项矩阵中的行号和列号。对于项目ID,它们必须是0到项目数减去1;对于用户ID,它们必须是0到用户数减去1。使用其他任何东西都会导致错误的结果。在mahout 1.0 spark作业中,您可以使用任何唯一的字符串,这一限制已被删除。但是hadoopmapreduce代码仍然需要这些id

相关问题