[ 
https://issues.apache.org/jira/browse/MAHOUT-353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12851789#action_12851789
 ] 

Hui Wen Han commented on MAHOUT-353:
------------------------------------

org.apache.mahout.cf.taste.impl.common.Cache

  private V getAndCacheValue(K key) throws TasteException {
    V value = retriever.get(key);   //we may get null here,if so ,we can not 
put the value to cache (FastMap).
    synchronized (cache) {
      cache.put(key, value);
    }
    return value;
  }

because in UserVectorToCooccurrenceReducer:

line49:      while (cooccurrences.hasNext()) {
        Vector.Element element = cooccurrences.next();
        if (element.get() <= 1.0) { // purge small values
          element.set(0.0); //here we set element to zero
        }
      }
in RecommenderMapper:
line 103:  Iterator<Vector.Element> userVectorIterator = 
userVector.iterateNonZero(); //here not get Zero item
    Vector recommendationVector = new 
RandomAccessSparseVector(Integer.MAX_VALUE, 1000);
    while (userVectorIterator.hasNext()) {
      Vector.Element element = userVectorIterator.next();
      int index = element.index();
      double value = element.get();
      Vector columnVector;
      try {
        columnVector = cooccurrenceColumnCache.get(new IntWritable(index)); 
//here may get null

    
so we need :


in  org.apache.mahout.cf.taste.impl.common.Cache

  private V getAndCacheValue(K key) throws TasteException {
    V value = retriever.get(key);   //we may get null here,if so ,we can not 
put the value to cache (FastMap).
    if (value == null)
   {
       return null;
   }
    synchronized (cache) {
      cache.put(key, value);
    }
    return value;
  }

in RecommenderMapper:
   while (userVectorIterator.hasNext()) {
      Vector.Element element = userVectorIterator.next();
      int index = element.index();
      double value = element.get();
      Vector columnVector;
      try {
        columnVector = cooccurrenceColumnCache.get(new IntWritable(index));
      } catch (TasteException te) {
        if (te.getCause() instanceof IOException) {
          throw (IOException) te.getCause();
        } else {
          throw new IOException(te.getCause());
        }
      }
     if (columnVector !=null)
    {
         columnVector.times(value).addTo(recommendationVector);
    }

    }

> java.lang.NullPointerException in RecommenderMapper
> ---------------------------------------------------
>
>                 Key: MAHOUT-353
>                 URL: https://issues.apache.org/jira/browse/MAHOUT-353
>             Project: Mahout
>          Issue Type: Bug
>          Components: Collaborative Filtering
>    Affects Versions: 0.4
>            Reporter: Hui Wen Han
>             Fix For: 0.4
>
>
> java.lang.NullPointerException
>       at 
> org.apache.mahout.cf.taste.hadoop.item.RecommenderMapper$CooccurrenceCache.get(RecommenderMapper.java:169)
>       at 
> org.apache.mahout.cf.taste.hadoop.item.RecommenderMapper$CooccurrenceCache.get(RecommenderMapper.java:154)
>       at 
> org.apache.mahout.cf.taste.impl.common.Cache.getAndCacheValue(Cache.java:125)
>       at org.apache.mahout.cf.taste.impl.common.Cache.get(Cache.java:94)
>       at 
> org.apache.mahout.cf.taste.hadoop.item.RecommenderMapper.map(RecommenderMapper.java:111)
>       at 
> org.apache.mahout.cf.taste.hadoop.item.RecommenderMapper.map(RecommenderMapper.java:52)
>       at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
>       at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358)
>       at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
>       at org.apache.hadoop.mapred.Child.main(Child.java:170)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to