You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@mahout.apache.org by tianwild <ti...@hotmail.com> on 2012/01/08 10:16:43 UTC

how to deploy my new recommender

I'm a new user of mahout. I have a problem about deploy a new recommender i
wrote at the last step: mvn jetty:run-war, the logs are as follows:

******logs begin*************************************
:WARN:/:unavailable
org.apache.mahout.cf.taste.common.TasteException:
java.lang.ClassNotFoundException: training.IntroRecommender
        at
org.apache.mahout.cf.taste.web.RecommenderSingleton.<init>(RecommenderSingleton.java:53)
******logs end*************************************

I want to know how to correctly configure the settings to make sure that
mahout can find the class file
(recommender.class=training.IntroRecommender).
Follow the example of grouplens instructions, I build it successful
(http://localhost:8080/RecommenderServlet?userID=1) on my one machine. My
problem is that the recommender I wrote can not build successfully. The
programs as follow:

***my program begin************************************
package training;

import java.io.*;
import java.util.*;

import org.apache.mahout.cf.taste.common.Refreshable;
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.NearestNUserNeighborhood;
import
org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import
org.apache.mahout.cf.taste.impl.similarity.AveragingPreferenceInferrer;
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.IDRescorer;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class IntroRecommender implements Recommender{
	private final Recommender recommender;
	public IntroRecommender() throws IOException,TasteException{
		this(new FileDataModel(new File("intro.csv")));
	}
	
	public IntroRecommender(DataModel model) throws TasteException{
		UserSimilarity userSimilarity=new PearsonCorrelationSimilarity(model);
		userSimilarity.setPreferenceInferrer(new
AveragingPreferenceInferrer(model));
		
		UserNeighborhood neighborhood=new
NearestNUserNeighborhood(3,userSimilarity,model);
		recommender=new
GenericUserBasedRecommender(model,neighborhood,userSimilarity);
	}
	
	//对外提供推荐接口,参数为用户标识和推荐项数目
	public List<RecommendedItem> recommend(long userID,int howMany) throws
TasteException{
		return recommender.recommend(userID,howMany);
	}
	
	public List<RecommendedItem> recommend(long userID,int howMany,IDRescorer
rescorer) throws TasteException{
		return recommender.recommend(userID,howMany,rescorer);
	}
	
	//以下方法都是实现Recommender的接口
	public float estimatePreference(long userID,long itemID) throws
TasteException{
		return recommender.estimatePreference(userID, itemID);
	}
	
	public void setPreference(long userID,long itemID,float value) throws
TasteException{
		recommender.setPreference(userID, itemID,value);
	}
	
	public void removePreference(long userID,long itemID) throws
TasteException{
		recommender.removePreference(userID, itemID);
	}
	
	public DataModel getDataModel(){
		return recommender.getDataModel();
	}
	
	public void refresh(Collection<Refreshable> alreadyRefreshed){
		recommender.refresh(alreadyRefreshed);
	}
	
	public String toString(){
		return "UserbasedRecommender[recommender:" + recommender + ']';
	}

}
***my program end************************************

my steps as follows:
1.put my data intro.csv and program IntroRecommender.class to one folder
like out;
2.build the jar file: jar cf intro.jar -C ./ .;
3. move the intro.jar to folder: ./mahout/taste-web/lib;
4. cd ./mahout/taste-web and edit the file recommender.properties:
recommender.class=training.IntroRecommender;
5. run: mvn package. A new .war file built at ./taste-web/target folder;
6. run: mvn jetty:run-war, but it run unsuccessfully and the logs means can
not find the .class file(training.IntroRecommender);

Wish my problem described clearly. Thanks so much.

Best regards
tianwild

--
View this message in context: http://lucene.472066.n3.nabble.com/how-to-deploy-my-new-recommender-tp3641633p3641633.html
Sent from the Mahout User List mailing list archive at Nabble.com.

Re: how to deploy my new recommender

Posted by tianwild <ti...@hotmail.com>.
I have solved this problem. There is something wrong with my program.

--
View this message in context: http://lucene.472066.n3.nabble.com/how-to-deploy-my-new-recommender-tp3641633p3646364.html
Sent from the Mahout User List mailing list archive at Nabble.com.

Re: how to deploy my new recommender

Posted by Sean Owen <sr...@gmail.com>.
The problem is right there: ClassNotFoundException. You have not
included the class training.IntroRecommender in whatever .jar files
you are deploying with your web app. This is not related to Mahout.

On Sun, Jan 8, 2012 at 9:16 AM, tianwild <ti...@hotmail.com> wrote:
> I'm a new user of mahout. I have a problem about deploy a new recommender i
> wrote at the last step: mvn jetty:run-war, the logs are as follows:
>
> ******logs begin*************************************
> :WARN:/:unavailable
> org.apache.mahout.cf.taste.common.TasteException:
> java.lang.ClassNotFoundException: training.IntroRecommender
>        at
> org.apache.mahout.cf.taste.web.RecommenderSingleton.<init>(RecommenderSingleton.java:53)
> ******logs end*************************************
>