The best I can say is that if it works as a command line process it will also work called from Java . Double check that what you are calling is the equivalent of the CLI and your arguments are the same. This is quite mature code.
On Mar 19, 2015, at 3:29 PM, James Parker <evans.notc...@gmail.com> wrote: 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 >> >> > >