简体   繁体   English

自定义推荐工作使用apache mahout 0.11.2 over hadoop

[英]Custom recommender jobs using apache mahout 0.11.2 over hadoop

I am newbie to Apache Mahout. 我是Apache Mahout的新手。 I am using Apache mahout 0.11.2. 我正在使用Apache mahout 0.11.2。 So to give it a try I created java class called samplereccommender.java as shown below. 所以为了试一试,我创建了一个名为samplereccommender.java的java类,如下所示。

package f;
import java.io.File;
import java.io.IOException;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import  org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import java.util.List;

public class SampleReccommender {
    public static void main(String args[]){
        try{
            DataModel datamodel = new FileDataModel(new File(args[0]));
            //Creating UserSimilarity object.
            UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
           //Creating UserNeighbourHHood object.
            UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(1.0, usersimilarity, datamodel);
          //Create UserRecomender
           UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
           List recommendations = (List) recommender.recommend(2, 3);
           System.out.println(recommendations.size());  
           for (int i=0; i< recommendations.size();i++) {
               System.out.println(recommendations.get(i));
           }
        }
catch(Exception e){
    e.printStackTrace();
}
}}

I managed to run same code from command line as 我设法从命令行运行相同的代码
java -cp n.jar f.SampleReccommender n_lib/wishlistdata.txt java -cp n.jar f.SampleReccommender n_lib / wishlistdata.txt

Now from what I read on the internet and book "Mahout in action" I understood that same code can be run on hadoop by using following commands. 现在从我在互联网上阅读并预订“Mahout in action”我了解到可以通过使用以下命令在hadoop上运行相同的代码。 first I need to include my SampleReccommender.java into existing apache-mahout-distribution-0.11.2/mahout-mr-0.11.2-job.jar. 首先,我需要将我的SampleReccommender.java包含到现有的apache-mahout-distribution-0.11.2 / mahout-mr-0.11.2-job.jar中。 So I followed following procedure. 所以我遵循了以下程序。

jar uf /Users/rohitjain/Documents/apache-mahout-distribution-0.11.2/mahout-mr-0.11.2-job.jar samplerecommender.jar jar uf /Users/rohitjain/Documents/apache-mahout-distribution-0.11.2/mahout-mr-0.11.2-job.jar samplerecommender.jar

then I tried running mahout job using following command 然后我尝试使用以下命令运行mahout作业

bin/hadoop jar /Users/rohitjain/Documents/apache-mahout-distribution-0.11.2/mahout-mr-0.11.2-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -i /input/wishlistdata.txt -o /output/ --recommenderClassName \\ f.SampleRecommender bin / hadoop jar /Users/rohitjain/Documents/apache-mahout-distribution-0.11.2/mahout-mr-0.11.2-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -i / input / wishlistdata.txt -o / output / --recommenderClassName \\ f.SampleRecommender

But it gives me an error as : 但它给了我一个错误:

Unexpected --recommenderClassName while processing Job-Specific Options: 处理特定于作业的选项时出现意外的--recommenderClassName:

I tried above command based on the syntax given "mahout in action" book which is as mentioned below 我根据给出的“mahout in action”一书的语法尝试了上面的命令,如下所述

hadoop jar mahout-core-0.5-job.jar \\ org.apache.mahout.cf.taste.hadoop.pseudo.RecommenderJob \\ -Dmapred.input.dir=input/ua.base.hadoop \\ -Dmapred.output.dir=output \\ --recommenderClassName \\ org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender hadoop jar mahout-core-0.5-job.jar \\ org.apache.mahout.cf.taste.hadoop.pseudo.RecommenderJob \\ -Dmapred.input.dir = input / ua.base.hadoop \\ -Dmapred.output.dir =输出\\ --recommenderClassName \\ org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender

Am I doing anything wrong ? 我做错了吗? Also tell me whether the code I used for standalone implementation same can be be used for recommenderJobs or it requires all together different implementation? 还告诉我,我用于独立实现的代码是否可用于推荐器或它需要所有不同的实现?

Mahout in Action is out of date and the code you are using is being deprecated. Mahout in Action已过期,您正在使用的代码已被弃用。

These days Mahout runs on more modern compute platforms like Spark. 目前,Mahout运行在更现代的计算平台上,如Spark。 For the latest Mahout Recommender you can start with the Command Line Interface to spark-itemsimilarity and integrated it with Solr or Eleasticsearch. 对于最新的Mahout推荐器,您可以从命令行界面开始,以激发项目相似性,并将其与Solr或Eleasticsearch集成。 Or you can pickup a fully integrated end-to-end solution linked below: 或者您可以选择下面链接的完全集成的端到端解决方案:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM