Pointing recommenderJobInput to ratings.csv generate error: ratings.csv not a SequenceFile at org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1851).......
2015-03-19 21:55 GMT+01:00 Pat Ferrel <p...@occamsmachete.com>: > 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 > > > > > >