Author: daijy
Date: Thu Oct 15 02:17:40 2009
New Revision: 825375

URL: http://svn.apache.org/viewvc?rev=825375&view=rev
Log:
PIG-921: Strange use case for Join which produces different results in local 
and map reduce mode

Modified:
    hadoop/pig/trunk/CHANGES.txt
    
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POLocalRearrange.java
    hadoop/pig/trunk/test/org/apache/pig/test/TestJoin.java

Modified: hadoop/pig/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=825375&r1=825374&r2=825375&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Thu Oct 15 02:17:40 2009
@@ -73,6 +73,8 @@
 
 PIG-1000: InternalCachedBag.java generates javac warning and findbug warning 
(yinghe via daijy)
 
+PIG-921: Strange use case for Join which produces different results in local 
and map reduce mode (daijy)
+
 Release 0.5.0 - Unreleased
 
 INCOMPATIBLE CHANGES

Modified: 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POLocalRearrange.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POLocalRearrange.java?rev=825375&r1=825374&r2=825375&view=diff
==============================================================================
--- 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POLocalRearrange.java
 (original)
+++ 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POLocalRearrange.java
 Thu Oct 15 02:17:40 2009
@@ -440,7 +440,9 @@
                         }
                     } else {
                         try {
-                            mProjectedColsMap.put(project.getColumn(), 
keyIndex);
+                            List<PhysicalOperator> preds = 
plan.getPredecessors(leaf);
+                            if (!(preds.get(0) instanceof POProject))
+                                mProjectedColsMap.put(project.getColumn(), 
keyIndex);
                         } catch (ExecException e) {
                             int errCode = 2070;
                             String msg = "Problem in accessing column from 
project operator.";

Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestJoin.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestJoin.java?rev=825375&r1=825374&r2=825375&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestJoin.java (original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestJoin.java Thu Oct 15 02:17:40 
2009
@@ -474,5 +474,40 @@
         }
         
     }
+    
+    @Test
+    public void testJoinTupleFieldKey() throws Exception{
+        for (ExecType execType : execTypes) {
+            setUp(execType);
+            String[] input1 = {
+                    "(1,a)",
+                    "(2,aa)"
+            };
+            String[] input2 = {
+                    "(1,b)",
+                    "(2,bb)"
+            };
+            
+            String firstInput = createInputFile(execType, "a.txt", input1);
+            String secondInput = createInputFile(execType, "b.txt", input2);
+            
+            String script = "a = load '"+ firstInput +"' as (a:tuple(a1:int, 
a2:chararray));" +
+                    "b = load '"+ secondInput +"' as (b:tuple(b1:int, 
b2:chararray));" +
+                    "c = join a by a.a1, b by b.b1;";
+            Util.registerMultiLineQuery(pigServer, script);
+            Iterator<Tuple> it = pigServer.openIterator("c");
+            
+            assertTrue(it.hasNext());
+            Tuple t = it.next();
+            assertTrue(t.toString().equals("((1,a),(1,b))"));
+            
+            assertTrue(it.hasNext());
+            t = it.next();
+            assertTrue(t.toString().equals("((2,aa),(2,bb))"));
+            
+            deleteInputFile(execType, firstInput);
+            deleteInputFile(execType, secondInput);
+        }
+    }
 
 }


Reply via email to