2014-03-31 27 views
0

當Mahout預計類型爲DataModel時,我的問題是將數據從Amazon S3提供給Mahout。來自hdfs或S3的Mahout DataModel流

我想運行一個應用程序亨利馬烏基本上只是做簡單的建議

new PearsonCorrelationSimilarity(DataModel); 

我可以做,只要它的工作,因爲我用常規的文件,我可以使用像從亞馬遜S3閱讀的東西這樣的:

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

但我給了我是一個流,什麼PearsonCorrelationSimilarity(DataModel)預計是亨利馬烏dataModel,這是應該進行備份與文件。

  1. 我可以在本地fs上進行推薦工作。
  2. 我可以讀取hdfs或S3。
  3. 我不知道如何將hdfs流轉換成可以輸入到dataModel中的東西。

我認爲這背後有一些非常簡單的東西,我無法看到,因爲我對Java沒有經驗。

回答

0

亨利馬烏的DataModel的是一些更具體的數據模型的抽象類:

  • 內存GenericDataModel
  • FileDataModel - 從內存中的文件,結果存儲讀取數據(在GenericDataModel
  • JDBCDataModel - 用於通過JDBC訪問的數據(即表單數據庫)。例如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,並用mapper,reducers和mahout的import來創建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用於僞分佈計算),用於使用自定義映射器和reducer。

這裏是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

+0

謝謝。我可能已經表達了這個問題不是那麼確切。我確實知道dataModel需要被指定,例如personCorrelationSimilarity期望FileDataModel。對我來說,根本問題是我無法弄清楚如何將FileDataModel從hdfs輸入流中提取出來。正如我所說,我可以使它與本地文件系統一起工作,在那裏我可以打開一個實際的文件。特別感謝文檔鏈接 - 我儘可能地避免了這種情況。 – svj

+0

不客氣。我更新了關於hdfs的文章,希望能更準確地解決問題。 –