Author: smarthi
Date: Wed May 29 05:47:05 2013
New Revision: 1487279
URL: http://svn.apache.org/r1487279
Log:
MAHOUT-1232: VectorHelper.topEntries() throws a NPE when number of NonZero
elements in vector < maxEntries
Modified:
mahout/trunk/CHANGELOG
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
Modified: mahout/trunk/CHANGELOG
URL:
http://svn.apache.org/viewvc/mahout/trunk/CHANGELOG?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
--- mahout/trunk/CHANGELOG (original)
+++ mahout/trunk/CHANGELOG Wed May 29 05:47:05 2013
@@ -2,6 +2,8 @@ Mahout Change Log
Release 0.8 - unreleased
+ MAHOUT-1232: VectorHelper.topEntries() throws a NPE when number of NonZero
elements in vector < maxEntries (smarthi)
+
MAHOUT-1229: Conf directory content from Mahout distribution archives cannot
be unpacked (Stevo Slavic via smarthi)
MAHOUT-1213: SSVD job doesn't clean it's temp dir, and fails when seeing it
again (smarthi)
Modified:
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
---
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
(original)
+++
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
Wed May 29 05:47:05 2013
@@ -251,7 +251,7 @@ public final class VectorDumper extends
writer.flush();
} finally {
if (shouldClose) {
- Closeables.closeQuietly(writer);
+ Closeables.close(writer, true);
}
}
Modified:
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
---
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
(original)
+++
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
Wed May 29 05:47:05 2013
@@ -19,6 +19,7 @@ package org.apache.mahout.utils.vectors;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
@@ -79,6 +80,12 @@ public final class VectorHelper {
}
public static List<Pair<Integer, Double>> topEntries(Vector vector, int
maxEntries) {
+ // Get the size of nonZero elements in the input vector
+ int sizeOfNonZeroElementsInVector = Iterables.size(vector.nonZeroes());
+ // If the sizeOfNonZeroElementsInVector < maxEntries then set maxEntries
to sizeOfNonZeroElementsInVector
+ // else the call to queue.pop() returns a Pair(null, null) and the
subsequent
+ // call to pair.getFirst() throws a NullPointerException
+ maxEntries = (sizeOfNonZeroElementsInVector < maxEntries) ?
sizeOfNonZeroElementsInVector : maxEntries;
PriorityQueue<Pair<Integer, Double>> queue = new TDoublePQ<Integer>(-1,
maxEntries);
for (Element e : vector.nonZeroes()) {
queue.insertWithOverflow(Pair.of(e.index(), e.get()));
Modified:
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
---
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
(original)
+++
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
Wed May 29 05:47:05 2013
@@ -17,6 +17,7 @@
package org.apache.mahout.utils.vectors;
+import com.google.common.collect.Iterables;
import org.apache.mahout.math.SequentialAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.utils.MahoutTestCase;
@@ -51,4 +52,22 @@ public final class VectorHelperTest exte
VectorHelper.vectorToJson(v, dictionary, 2, false));
}
+ @Test
+ public void testTopEntries() throws Exception {
+ Vector v = new SequentialAccessSparseVector(10);
+ v.set(2, 3.1);
+ v.set(4, 1.0);
+ v.set(6, 8.1);
+ v.set(7, -100);
+ v.set(9, 12.2);
+ v.set(1, 0.0);
+ v.set(3, 0.0);
+ v.set(8, 2.7);
+ assertEquals(6, VectorHelper.topEntries(v, 6).size());
+ // when sizeOfNonZeroElementsInVector < maxEntries
+ assertTrue(VectorHelper.topEntries(v, 9).size() < 9);
+ // when sizeOfNonZeroElementsInVector > maxEntries
+ assertTrue(VectorHelper.topEntries(v, 5).size() <
Iterables.size(v.nonZeroes()));
+ }
+
}