You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2014/02/21 01:19:39 UTC

svn commit: r1570401 - in /pig/trunk: CHANGES.txt contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java

Author: daijy
Date: Fri Feb 21 00:19:39 2014
New Revision: 1570401

URL: http://svn.apache.org/r1570401
Log:
PIG-3774: Piggybank Over UDF get wrong result

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java
    pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1570401&r1=1570400&r2=1570401&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Fri Feb 21 00:19:39 2014
@@ -225,6 +225,8 @@ PIG-3480: TFile-based tmpfile compressio
 
 BUG FIXES
 
+PIG-3774: Piggybank Over UDF get wrong result (daijy)
+
 PIG-3657: New partition filter extractor fails with NPE (cheolsoo)
 
 PIG-3347: Store invocation brings side effect (daijy)

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java?rev=1570401&r1=1570400&r2=1570401&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/Over.java Fri Feb 21 00:19:39 2014
@@ -349,7 +349,8 @@ public class Over extends EvalFunc<DataB
         } else if ("percent_rank".equalsIgnoreCase(agg)) {
             func = new PercentRank(udfArgs);
         } else if ("cume_dist".equalsIgnoreCase(agg)) {
-            func = new CumeDist(udfArgs);
+            //func = new CumeDist(udfArgs);
+            func = new CumeDist();
         } else if ("debug".equalsIgnoreCase(agg)) {
             func = new Debug();
         } else {
@@ -755,6 +756,7 @@ public class Over extends EvalFunc<DataB
         }
     }
 
+    /*
     private static class CumeDist extends BaseRank<Double> {
         CumeDist(Object[] args) throws IOException {
             super(args);
@@ -768,6 +770,20 @@ public class Over extends EvalFunc<DataB
             return ((double)lastRankUsed) / (double)iter.tuples.size();
         }
     }
+    */
+
+    private static class CumeDist extends ResetableEvalFunc<Double> {
+
+        @Override
+        public Double exec(Tuple input) throws IOException {
+            DataBag inbag = (DataBag)input.get(0);
+            OverBag.OverBagIterator iter =
+                (OverBag.OverBagIterator)inbag.iterator();
+
+            return ((double)++currentRow)/(double)iter.tuples.size();
+        }
+    }
+
 
 
 

Modified: pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java?rev=1570401&r1=1570400&r2=1570401&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java (original)
+++ pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/evaluation/TestOver.java Fri Feb 21 00:19:39 2014
@@ -1610,6 +1610,13 @@ public class TestOver {
         t.set(4, 0);
         DataBag outbag = func.exec(t);
         assertEquals(7, outbag.size());
+        int count = 1;
+        for (Tuple to : outbag) {
+            assertEquals(1, to.size());
+            assertEquals(count/7.0, to.get(0));
+            count++;
+        }
+        /*
         Iterator<Tuple> iter = outbag.iterator();
         t = iter.next();
         assertEquals(0.14285714285714285, t.get(0));
@@ -1625,5 +1632,6 @@ public class TestOver {
         assertEquals(0.5714285714285714, t.get(0));
         t = iter.next();
         assertEquals(1.0, t.get(0));
+        */
     }
 }