That is from some very old code that is on the deprecation path. Mahout doesn’t accept Hadoop Mapreduce code anymore and this is even older, part of the Taste in-memory recommender. So if you change it, you may have to maintain it yourself.
If you want something more modern, check out the Mahout + Spark + Search engine recommender here: https://templates.prediction.io/PredictionIO/template-scala-parallel-universal-recommendation. Too many new features to list here but still based on the SimilarityAnalysis part of Mahout. > On Dec 26, 2015, at 1:20 PM, Tomasz Tretkowski <ttretkow...@wp.pl> wrote: > > Hi all. > > I am using GenericBooleanPrefItemBasedRecommender with Tanimoto similarity. > To improve performance I used CachingUserSimilarity (code below) > > public Recommender buildRecommender(DataModel dataModel) throws > TasteException { > UserSimilarity similarity = new CachingUserSimilarity(new > TanimotoCoefficientSimilarity(similarityDataModel), similarityDataModel); > UserNeighborhood neighborhood = new NearestNUserNeighborhood(8, > Double.NEGATIVE_INFINITY, similarity, dataModel, 1.0); > return new GenericBooleanPrefUserBasedRecommender(dataModel, > neighborhood, similarity); > } > > However when I ran load tests on my server then I found that only about two > out of eight cpu cores were utilized. The rest was waiting idle in > org.apache.mahout.cf.taste.impl.common.Cache.get method. That is probably due > to the fact that Cache.get method used in CachingUserSimilarity looks like > this: > public V get(K key) throws TasteException { > V value; > synchronized (cache) { > value = cache.get(key); > } > ... > > Threads doing concurrent reads are blocking each other. I would expect > standard double-checked locking pattern there to avoid that if it is not > necessary (i.e. there is a hit and the cache is not modified). > Am I doing something wrong or there is a defect in Cache class? > > -- > Pozdrowienia, > Tomasz Tretkowski > >