recommenderJobInput should point to the ratings.csv looks like it pointing to 
als output.

On Mar 19, 2015, at 10:15 AM, James Parker <evans.notc...@gmail.com> wrote:

The step 3 is just to evaluate my recommender.

I had follow the same steps using CLI and everything  works well : (mahout
splitDataset , mahout parallelALS, mahout recommendfactorized). I think
that is something  wrong  with the RecommederJob class. Here is my  java
code:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import org.apache.hadoop.conf.Configuration;
import org.apache.mahout.cf.taste.hadoop.als.DatasetSplitter;
import org.apache.mahout.cf.taste.hadoop.als.ParallelALSFactorizationJob;
import org.apache.mahout.cf.taste.hadoop.als.RecommenderJob;

public class Test {

   public static String baseDirectory =
MainAlsRecommender.class.getResource("/reco").getPath();
   public static String inputSplitDirectory = baseDirectory
+"/ratings.csv";
   public static String outputSplitDirectory = baseDirectory ;
   public static  String inputAlsDirectory = baseDirectory
+"/trainingSet/";
   public static  String outputAlsDirectory = baseDirectory +"/als/out";
   public static  String recommenderJobUserFeatures = baseDirectory
+"/als/out/U/";
   public static  String recommenderJobItemFeatures = baseDirectory
+"/als/out/M/";
   public static  String recommenderJobInput = baseDirectory
+"/als/out/userRatings/";
   public static  String recommenderJobOutput = baseDirectory
+"/recommendations/";
   public static String similarityMatrixDirectory = baseDirectory
+"/similarityMatrix";
   public static String tmpDirectory = baseDirectory +"/tmp";
   public static String similarityClassname = "SIMILARITY_COSINE";

      public static void main(String[] args) throws Exception {


            Configuration config = new Configuration();


            DatasetSplitter datasetSplitter =  new DatasetSplitter();
            String[] datasetSplitterArgs = {"--input",
inputSplitDirectory, "--output", outputSplitDirectory,
"--trainingPercentage", "0.9",
                   "--probePercentage","0.1"};
             datasetSplitter.setConf(config);
            datasetSplitter.run(datasetSplitterArgs);

            //

            ParallelALSFactorizationJob parallelALSFactorizationJob = new
ParallelALSFactorizationJob();
            String[] parallelAlsFactorisationArgs = {"--input",
inputAlsDirectory, "--output", outputAlsDirectory, "--numFeatures", "20",
                       "--numIterations","10","--lambda","0.065"};
           parallelALSFactorizationJob.setConf(config);
            parallelALSFactorizationJob.run(parallelAlsFactorisationArgs);



            // Mahout’s recommendfactorized function will compute
recommendations based on ratings matrix

            RecommenderJob recommenderJob = new RecommenderJob();
        String[] recommenderJobArgs = {"--input", recommenderJobInput,
"--output",recommenderJobOutput,"--userFeatures",
recommenderJobUserFeatures ,
                       "--itemFeatures",recommenderJobItemFeatures,
"--numRecommendations","6","--maxRating","5"};
            recommenderJob.setConf(config);
           recommenderJob.run(recommenderJobArgs);





       }
}


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Thanks you very much



2015-03-19 15:53 GMT+01:00 Pat Ferrel <p...@occamsmachete.com>:

> I think that means you are using the wrong input to #4. It looks like you
> are trying to evaluate the ALS recs then create a recommender? To use ALS
> for recs try the CLI first see “mahout recommendfactorized” with input =
> (userid, itemid, rating). If #4 is to create all recs for all known users
> then it is independent of all other jobs since it takes interactions or
> ratings as input. not the output f a previous job.
> 
> 
> On Mar 19, 2015, at 7:11 AM, James Parker <evans.notc...@gmail.com> wrote:
> 
> Hi,
> I try ALS recommender using Java code.  This is the steps i follow:
> 1.  I create DatasetSplitter Job
> 
> 2.  I create ParallelALSFactorizationJob  Job
> 
> 3. I create FactorizationEvaluator   Job
> 
> 4.  I create RecommenderJob Job
> 
> Everything  is ok for 1 to 3. But when i run the RecommenderJob , i have
> the following error
> 
> -------------------------------------------------------------------------------------------------------------------------------
> java.lang.Exception: java.lang.RuntimeException:
> java.lang.ClassCastException:
> org.apache.mahout.math.map.OpenIntObjectHashMap cannot be cast to
> org.apache.mahout.common.Pair
>   at
> org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
> .
> .
> 
> ----------------------------------------------------------------------------------------------------------------------------
> 
> 
> I'm suprised to see that if i run steps 1 to 3 using my java code, and the
> last step using the command line "mahout recommendfactorized ........"
> with  the files generates with my java code steps 1 to 3), recommendations
> are correctly generated.
> 
> Thanks you very much
> 
> Evans
> 
> 

Reply via email to