来自hdfs或S3 Stream的Mahout DataModel

时间:2014-03-31 13:10:09

标签: amazon-s3 mahout

当Mahout期待DataModel类型时,我的问题是将数据从Amazon S3提供给Mahout。

我正在尝试运行Mahout应用程序,它基本上只是执行简单的建议

new PearsonCorrelationSimilarity(DataModel);

只要我使用常规文件系统,我就可以使它工作,我可以使用以下内容从Amazon S3读取内容:

FileSystem fs = FileSystem.get(URI.create("s3n://mybucket"), conf);
FSDataInputStream userPreferencesFile = fs.open(new Path("path/to/my/file"));

但是我给我的是一个流,PearsonCorrelationSimilarity(DataModel)期望的是Mahout dataModel,它应该用文件备份。

  1. 我可以让推荐人在本地fs上工作。
  2. 我可以阅读hdfs或S3。
  3. 我无法弄清楚如何将hdfs流变成可以输入dataModel的东西。
  4. 我认为这背后有一些非常简单的东西,我看不到,因为我对Java很缺乏经验。

1 个答案:

答案 0 :(得分:0)

Mahout的DataModel是一些更具体的数据模型的抽象类:

  • 内存 GenericDataModel
  • FileDataModel - 从文件中读取数据并将结果存储在内存中(在 GenericDataModel 中)
  • JDBCDataModel - 用于通过JDBC(即表单DB)访问的数据。例如MySQLJDBCDataModel
  • 其他数据模型(例如mongoDB)

因此您需要指定更具体的数据模型。像这样:

...
DataModel dataModel = new FileDataModel(new File("path/to/my/file"));
PearsonCorrelationSimilarity(dataModel);
...

更多详情请点击此处:http://mahout.apache.org/users/recommender/recommender-documentation.html

修改

不能只是从普通文件系统读取分布式hdfs。如果你想使用hdfs(和hadoop),你必须使用hadoop的I / O并使用mappers,redurs和mahout的导入创建hadoop的工作。运行mahout推荐器将如下所示:

~$ hadoop fs -put data_dir
~$ hadoop jar $MAHOUT_HOME/mahout-core-0.8-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COSINE --input data_dir --output output_dir 

您可以使用自定义映射器和缩减器覆盖默认的org.apache.mahout.cf.taste.hadoop.item.RecommenderJob(或org.apache.mahout.cf.taste.hadoop.pseudo.RecommenderJob以进行伪分布计算)。

这里是RecommenderJob的源代码示例:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.6/org/apache/mahout/cf/taste/hadoop/item/RecommenderJob.java