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 2010/12/23 19:53:53 UTC

svn commit: r1052354 - in /pig/trunk: ./ src/org/apache/pig/backend/hadoop/ src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/ src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/ src/org/apache/pig/impl/i...

Author: daijy
Date: Thu Dec 23 18:53:53 2010
New Revision: 1052354

URL: http://svn.apache.org/viewvc?rev=1052354&view=rev
Log:
PIG-1277: Pig should give error message when cogroup on tuple keys of different inner type

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/backend/hadoop/HDataType.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigBytesRawComparator.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigMapReduce.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POMultiQueryPackage.java
    pig/trunk/src/org/apache/pig/impl/io/NullableBytesWritable.java
    pig/trunk/src/org/apache/pig/newplan/logical/relational/LOUnion.java
    pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java
    pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java
    pig/trunk/test/org/apache/pig/test/TestPackage.java
    pig/trunk/test/org/apache/pig/test/TestSecondarySort.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu Dec 23 18:53:53 2010
@@ -24,6 +24,8 @@ INCOMPATIBLE CHANGES
 
 IMPROVEMENTS
 
+PIG-1277: Pig should give error message when cogroup on tuple keys of different inner type (daijy)
+
 PIG-1755: Clean up duplicated code in PhysicalOperators (dvryaboy)
 
 PIG-750: Use combiner when algebraic UDFs are used in expressions (thejas)
@@ -247,6 +249,8 @@ PIG-1309: Map-side Cogroup (ashutoshc)
 
 BUG FIXES
 
+PIG-1771: New logical plan: Merge schema fail if LoadFunc.getSchema return different schema with "Load...AS" (daijy)
+
 PIG-1766: New logical plan: ImplicitSplitInserter should before DuplicateForEachColumnRewrite (daijy)
 
 PIG-1762: Logical simplification fails on map key referenced values (yanz)

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/HDataType.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/HDataType.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/HDataType.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/HDataType.java Thu Dec 23 18:53:53 2010
@@ -53,8 +53,12 @@ public class HDataType {
     static Map<Byte, String> typeToName = null;
 
     public static PigNullableWritable getWritableComparableTypes(Object o, byte keyType) throws ExecException{
-        byte type = DataType.findType(o);
-        switch (type) {
+        
+        byte newKeyType = keyType;
+        if (o==null)
+            newKeyType = DataType.NULL;
+        
+        switch (newKeyType) {
         case DataType.BAG:
             return new NullableBag((DataBag)o);
 
@@ -62,7 +66,7 @@ public class HDataType {
             return new NullableBooleanWritable((Boolean)o);
 
         case DataType.BYTEARRAY:
-            return new NullableBytesWritable(((DataByteArray)o).get());
+            return new NullableBytesWritable(o);
             
         case DataType.CHARARRAY:
             return new NullableText((String)o);
@@ -138,7 +142,7 @@ public class HDataType {
             if (typeToName == null) typeToName = DataType.genTypeToNameMap();
             int errCode = 2044;
             String msg = "The type "
-                + typeToName.get(type)
+                + typeToName.get(keyType)
                 + " cannot be collected as a Key type";
             throw new ExecException(msg, errCode, PigException.BUG);
 
@@ -192,4 +196,30 @@ public class HDataType {
         }
         return wcKey;
     }
+    
+    public static byte findTypeFromNullableWritable(PigNullableWritable o) throws ExecException {
+        if (o instanceof NullableBooleanWritable)
+            return DataType.BOOLEAN;
+        else if (o instanceof NullableBytesWritable)
+            return DataType.BYTEARRAY;
+        else if (o instanceof NullableText)
+            return DataType.CHARARRAY;
+        else if (o instanceof NullableFloatWritable)
+            return DataType.FLOAT;
+        else if (o instanceof NullableDoubleWritable)
+            return DataType.DOUBLE;
+        else if (o instanceof NullableIntWritable)
+            return DataType.INTEGER;
+        else if (o instanceof NullableLongWritable)
+            return DataType.LONG;
+        else if (o instanceof NullableBag)
+            return DataType.BAG;
+        else if (o instanceof NullableTuple)
+            return DataType.TUPLE;
+        else {
+            int errCode = 2044;
+            String msg = "Cannot find Pig type for " + o.getClass().getName();
+            throw new ExecException(msg, errCode, PigException.BUG);
+        }
+    }    
 }

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigBytesRawComparator.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigBytesRawComparator.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigBytesRawComparator.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigBytesRawComparator.java Thu Dec 23 18:53:53 2010
@@ -29,6 +29,7 @@ import org.apache.hadoop.io.WritableComp
 import org.apache.hadoop.mapred.JobConf;
 
 import org.apache.pig.data.DataByteArray;
+import org.apache.pig.data.DataType;
 import org.apache.pig.impl.io.NullableBytesWritable;
 import org.apache.pig.impl.util.ObjectSerializer;
 
@@ -97,7 +98,7 @@ public class PigBytesRawComparator exten
 
         // If either are null, handle differently.
         if (!nbw1.isNull() && !nbw2.isNull()) {
-            rc = ((DataByteArray)nbw1.getValueAsPigType()).compareTo((DataByteArray)nbw2.getValueAsPigType());
+            rc = DataType.compare(nbw1.getValueAsPigType(), nbw2.getValueAsPigType());
         } else {
             // For sorting purposes two nulls are equal.
             if (nbw1.isNull() && nbw2.isNull()) rc = 0;

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigMapReduce.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigMapReduce.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigMapReduce.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigMapReduce.java Thu Dec 23 18:53:53 2010
@@ -187,7 +187,7 @@ public class PigMapReduce {
 			}
 
             PigNullableWritable key =
-                HDataType.getWritableComparableTypes(tuple.get(tupleKeyIdx), DataType.TUPLE);
+                HDataType.getWritableComparableTypes(tuple.get(tupleKeyIdx), keyType);
 
             NullablePartitionWritable wrappedKey = new NullablePartitionWritable(key);
 

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POMultiQueryPackage.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POMultiQueryPackage.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POMultiQueryPackage.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POMultiQueryPackage.java Thu Dec 23 18:53:53 2010
@@ -265,7 +265,7 @@ public class POMultiQueryPackage extends
                 myObj.setNull(true);
             }
             else {
-                myObj = HDataType.getWritableComparableTypes(obj, (byte)0);
+                myObj = HDataType.getWritableComparableTypes(obj, HDataType.findTypeFromNullableWritable(curKey));
             }
             myObj.setIndex(origIndex);
             tuple.set(0, myObj);

Modified: pig/trunk/src/org/apache/pig/impl/io/NullableBytesWritable.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/impl/io/NullableBytesWritable.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/impl/io/NullableBytesWritable.java (original)
+++ pig/trunk/src/org/apache/pig/impl/io/NullableBytesWritable.java Thu Dec 23 18:53:53 2010
@@ -17,9 +17,9 @@
  */
 package org.apache.pig.impl.io;
 
-import org.apache.hadoop.io.BytesWritable;
-
-import org.apache.pig.data.DataByteArray;
+import org.apache.pig.backend.executionengine.ExecException;
+import org.apache.pig.data.Tuple;
+import org.apache.pig.data.TupleFactory;
 
 /**
  *
@@ -27,18 +27,26 @@ import org.apache.pig.data.DataByteArray
 public class NullableBytesWritable extends PigNullableWritable {
 
     public NullableBytesWritable() {
-        mValue = new BytesWritable();
+        mValue = TupleFactory.getInstance().newTuple();
     }
 
     /**
-     * @param bytes
+     * @param obj
      */
-    public NullableBytesWritable(byte[] bytes) {
-        mValue = new BytesWritable(bytes);
+    public NullableBytesWritable(Object obj) {
+        mValue = TupleFactory.getInstance().newTuple();
+        ((Tuple)mValue).append(obj);
     }
 
     public Object getValueAsPigType() {
-        BytesWritable bw = (BytesWritable)mValue;
-        return isNull() ? null : new DataByteArray(bw.getBytes(), 0, bw.getLength());
+        if (isNull())
+            return null;
+        Object obj = null;
+        try {
+            obj = ((Tuple)mValue).get(0);
+        } catch (ExecException e) {
+            throw new RuntimeException(e);
+        }
+        return obj;
     }
 }

Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOUnion.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOUnion.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOUnion.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOUnion.java Thu Dec 23 18:53:53 2010
@@ -58,6 +58,8 @@ public class LOUnion extends LogicalRela
             return s0;
         LogicalSchema s1 = ((LogicalRelationalOperator)inputs.get(1)).getSchema();
         LogicalSchema mergedSchema = LogicalSchema.merge(s0, s1);
+        if (mergedSchema==null)
+            return null;
         
         // Merge schema
         for (int i=2;i<inputs.size();i++) {

Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java Thu Dec 23 18:53:53 2010
@@ -333,9 +333,6 @@ public class LogicalSchema {
             
             if (DataType.isSchemaType(mergedType)) {
                 mergedSubSchema = merge(fs1.schema, fs2.schema);
-                if (mergedSubSchema==null) {
-                    throw new FrontendException("Error merging schema " + fs1 + " and " + fs2, 2246);
-                }
             }
             LogicalFieldSchema mergedFS = new LogicalFieldSchema(mergedAlias, mergedSubSchema, mergedType);
             mergedSchema.addField(mergedFS);

Modified: pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java Thu Dec 23 18:53:53 2010
@@ -27,10 +27,12 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.apache.pig.EvalFunc;
 import org.apache.pig.ExecType;
 import org.apache.pig.PigException;
 import org.apache.pig.PigServer;
@@ -39,6 +41,7 @@ import org.apache.pig.builtin.BinStorage
 import org.apache.pig.data.BagFactory;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
+import org.apache.pig.data.DataType;
 import org.apache.pig.data.Tuple;
 import org.apache.pig.data.TupleFactory;
 import org.apache.pig.impl.io.FileLocalizer;
@@ -463,12 +466,12 @@ public class TestEvalPipeline2 extends T
         assertTrue(iter.hasNext());
         Tuple t = iter.next();
         
-        assertTrue(t.toString().equals("(1,{(1,1)},{(1,2,3)})"));
+        assertTrue(t.toString().equals("(2,{(2,2)},{(2,5,2)})"));
         
         assertTrue(iter.hasNext());
         t = iter.next();
         
-        assertTrue(t.toString().equals("(2,{(2,2)},{(2,5,2)})"));
+        assertTrue(t.toString().equals("(1,{(1,1)},{(1,2,3)})"));
         
         assertFalse(iter.hasNext());
     }
@@ -1014,4 +1017,117 @@ public class TestEvalPipeline2 extends T
         assertTrue(t.get(0).equals("one"));
         assertTrue(t.get(1).equals("two"));
     }
+    
+    // See PIG-1771
+    @Test
+    public void testLoadWithDifferentSchema() throws Exception{
+        String[] input1 = {
+                "hello\thello\t(hello)\t[key#value]",
+        };
+        
+        Util.createInputFile(cluster, "table_testLoadWithDifferentSchema1", input1);
+        pigServer.registerQuery("a = load 'table_testLoadWithDifferentSchema1' as (a0:chararray, a1:chararray, a2, a3:map[]);");
+        pigServer.store("a", "table_testLoadWithDifferentSchema1.bin", "org.apache.pig.builtin.BinStorage");
+        
+        pigServer.registerQuery("b = load 'table_testLoadWithDifferentSchema1.bin' USING BinStorage('Utf8StorageConverter') AS (b0:chararray, b1:chararray, b2:tuple(), b3:map[]);");
+        Iterator<Tuple> iter = pigServer.openIterator("b");
+        
+        Tuple t = iter.next();
+        assertTrue(t.size()==4);
+        assertTrue(t.toString().equals("(hello,hello,(hello),[key#value])"));
+    }
+    
+    static public class MapGenerate extends EvalFunc<Map> {
+        @Override
+        public Map exec(Tuple input) throws IOException {
+            Map m = new HashMap();
+            m.put("key", new Integer(input.size()));
+            return m;
+        }
+        
+        @Override
+        public Schema outputSchema(Schema input) {
+            return new Schema(new Schema.FieldSchema(null, DataType.MAP));
+        }
+    }
+    
+    // See PIG-1277
+    @Test
+    public void testWrappingUnknownKey1() throws Exception{
+        String[] input1 = {
+                "1",
+        };
+        
+        Util.createInputFile(cluster, "table_testWrappingUnknownKey1", input1);
+
+        pigServer.registerQuery("a = load 'table_testWrappingUnknownKey1' as (a0);");
+        pigServer.registerQuery("b = foreach a generate a0, "+ MapGenerate.class.getName() + "(*) as m:map[];");
+        pigServer.registerQuery("c = foreach b generate a0, m#'key' as key;");
+        pigServer.registerQuery("d = group c by key;");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("d");
+        
+        Tuple t = iter.next();
+        assertTrue(t.size()==2);
+        assertTrue(t.toString().equals("(1,{(1,1)})"));
+        assertFalse(iter.hasNext());
+    }
+    
+    // See PIG-999
+    @Test
+    public void testWrappingUnknownKey2() throws Exception{
+        String[] input1 = {
+                "1",
+        };
+        
+        Util.createInputFile(cluster, "table_testWrappingUnknownKey2", input1);
+
+        pigServer.registerQuery("a = load 'table_testWrappingUnknownKey2' as (a0);");
+        pigServer.registerQuery("b = foreach a generate a0, "+ MapGenerate.class.getName() + "(*) as m:map[];");
+        pigServer.registerQuery("c = foreach b generate a0, m#'key' as key;");
+        pigServer.registerQuery("d = order c by key;");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("d");
+        
+        Tuple t = iter.next();
+        assertTrue(t.size()==2);
+        assertTrue(t.toString().equals("(1,1)"));
+        assertFalse(iter.hasNext());
+    }
+    
+    // See PIG-1065
+    @Test
+    public void testWrappingUnknownKey3() throws Exception{
+        String[] input1 = {
+                "1\t2",
+                "2\t3"
+        };
+        
+        String[] input2 = {
+                "1",
+        };
+        
+        Util.createInputFile(cluster, "table_testWrappingUnknownKey3_1", input1);
+        Util.createInputFile(cluster, "table_testWrappingUnknownKey3_2", input2);
+
+        pigServer.registerQuery("a = load 'table_testWrappingUnknownKey3_1' as (a0:chararray, a1:chararray);");
+        pigServer.registerQuery("b = load 'table_testWrappingUnknownKey3_2' as (b0:chararray);");
+        pigServer.registerQuery("c = union a, b;");
+        pigServer.registerQuery("d = order c by $0;");
+        
+        Collection<String> results = new HashSet<String>();
+        results.add("(1,2)");
+        results.add("(1)");
+        results.add("(2,3)");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("d");
+        
+        Tuple t = iter.next();
+        assertTrue(results.contains(t.toString()));
+        t = iter.next();
+        assertTrue(results.contains(t.toString()));
+        t = iter.next();
+        assertTrue(results.contains(t.toString()));
+        assertFalse(iter.hasNext());
+    }
 }

Modified: pig/trunk/test/org/apache/pig/test/TestPackage.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPackage.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPackage.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPackage.java Thu Dec 23 18:53:53 2010
@@ -56,7 +56,7 @@ public class TestPackage extends junit.f
     public void tearDown() throws Exception {
     }
     
-    private void runTest(Object key, boolean inner[]) throws ExecException, IOException {
+    private void runTest(Object key, boolean inner[], byte keyType) throws ExecException, IOException {
         Random r = new Random();
         DataBag db1 = GenRandomData.genRandSmallTupDataBag(r, 10, 100);
         DataBag db2 = GenRandomData.genRandSmallTupDataBag(r, 10, 100);
@@ -79,7 +79,7 @@ public class TestPackage extends junit.f
         POPackage pop = new POPackage(new OperatorKey("", r.nextLong()));
         pop.setNumInps(2);
         pop.setInner(inner);
-        PigNullableWritable k = HDataType.getWritableComparableTypes(key, (byte)0);
+        PigNullableWritable k = HDataType.getWritableComparableTypes(key, keyType);
         pop.attachInput(k, db.iterator());
         
         // we are not doing any optimization to remove
@@ -117,43 +117,43 @@ public class TestPackage extends junit.f
         Random r = new Random();
         switch (t) {
         case DataType.BAG:
-            runTest(GenRandomData.genRandSmallTupDataBag(r, 10, 100),inner);
+            runTest(GenRandomData.genRandSmallTupDataBag(r, 10, 100),inner, DataType.BAG);
             break;
         case DataType.BOOLEAN:
-            runTest(r.nextBoolean(),inner);
+            runTest(r.nextBoolean(),inner, DataType.BOOLEAN);
             break;
         case DataType.BYTEARRAY:
-            runTest(GenRandomData.genRandDBA(r),inner);
+            runTest(GenRandomData.genRandDBA(r),inner, DataType.BYTEARRAY);
             break;
         case DataType.BIGCHARARRAY: {
 			String s = GenRandomData.genRandString(r);			
 			for(;s.length() < 65535;) {
 				s += GenRandomData.genRandString(r);
 			}
-			runTest(s,inner);
+			runTest(s,inner, DataType.CHARARRAY);
         	break;
         }        	
         case DataType.CHARARRAY:
-            runTest(GenRandomData.genRandString(r),inner);
+            runTest(GenRandomData.genRandString(r),inner, DataType.CHARARRAY);
             break;
         case DataType.DOUBLE:
-            runTest(r.nextDouble(),inner);
+            runTest(r.nextDouble(),inner, DataType.DOUBLE);
             break;
         case DataType.FLOAT:
-            runTest(r.nextFloat(),inner);
+            runTest(r.nextFloat(),inner, DataType.FLOAT);
             break;
         case DataType.INTEGER:
-            runTest(r.nextLong(),inner);
+            runTest(r.nextInt(),inner, DataType.INTEGER);
             break;
         case DataType.LONG:
-            runTest(r.nextLong(),inner);
+            runTest(r.nextLong(),inner, DataType.LONG);
             break;
         case DataType.MAP:
         case DataType.INTERNALMAP:
         case DataType.BYTE:
             return; // map not key type
         case DataType.TUPLE:
-            runTest(GenRandomData.genRandSmallBagTuple(r, 10, 100),inner);
+            runTest(GenRandomData.genRandSmallBagTuple(r, 10, 100),inner, DataType.TUPLE);
             break;
 
         default:

Modified: pig/trunk/test/org/apache/pig/test/TestSecondarySort.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestSecondarySort.java?rev=1052354&r1=1052353&r2=1052354&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestSecondarySort.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestSecondarySort.java Thu Dec 23 18:53:53 2010
@@ -444,9 +444,9 @@ public class TestSecondarySort extends T
                 .registerQuery("D = foreach C { E = limit A 10; F = E.a1; G = DISTINCT F; generate group, COUNT(G);};");
         Iterator<Tuple> iter = pigServer.openIterator("D");
         assertTrue(iter.hasNext());
-        assertTrue(iter.next().toString().equals("(1,2)"));
-        assertTrue(iter.hasNext());
         assertTrue(iter.next().toString().equals("(2,1)"));
+        assertTrue(iter.hasNext());
+        assertTrue(iter.next().toString().equals("(1,2)"));
         assertFalse(iter.hasNext());
         Util.deleteFile(cluster, tmpFile1.getCanonicalPath());
         Util.deleteFile(cluster, tmpFile2.getCanonicalPath());
@@ -469,9 +469,9 @@ public class TestSecondarySort extends T
         pigServer.registerQuery("C = foreach B { D = distinct A; generate group, D;};");
         Iterator<Tuple> iter = pigServer.openIterator("C");
         assertTrue(iter.hasNext());
-        assertTrue(iter.next().toString().equals("(1,{(1,2,3),(1,2,4),(1,3,4)})"));
-        assertTrue(iter.hasNext());
         assertTrue(iter.next().toString().equals("(2,{(2,3,4)})"));
+        assertTrue(iter.hasNext());
+        assertTrue(iter.next().toString().equals("(1,{(1,2,3),(1,2,4),(1,3,4)})"));
         assertFalse(iter.hasNext());
         Util.deleteFile(cluster, tmpFile1.getCanonicalPath());
     }
@@ -493,9 +493,9 @@ public class TestSecondarySort extends T
         pigServer.registerQuery("C = foreach B { D = limit A 10; E = order D by $1; generate group, E;};");
         Iterator<Tuple> iter = pigServer.openIterator("C");
         assertTrue(iter.hasNext());
-        assertTrue(iter.next().toString().equals("(1,{(1,2,3),(1,2,4),(1,2,4),(1,2,4),(1,3,4)})"));
-        assertTrue(iter.hasNext());
         assertTrue(iter.next().toString().equals("(2,{(2,3,4)})"));
+        assertTrue(iter.hasNext());
+        assertTrue(iter.next().toString().equals("(1,{(1,2,3),(1,2,4),(1,2,4),(1,2,4),(1,3,4)})"));
         assertFalse(iter.hasNext());
         Util.deleteFile(cluster, tmpFile1.getCanonicalPath());
     }
@@ -517,9 +517,9 @@ public class TestSecondarySort extends T
         pigServer.registerQuery("C = foreach B { D = order A by a1 desc; generate group, D;};");
         Iterator<Tuple> iter = pigServer.openIterator("C");
         assertTrue(iter.hasNext());
-        assertEquals("(1,{(1,8,4),(1,4,4),(1,3,4),(1,2,3),(1,2,4)})", iter.next().toString());
-        assertTrue(iter.hasNext());
         assertEquals("(2,{(2,3,4)})", iter.next().toString());
+        assertTrue(iter.hasNext());
+        assertEquals("(1,{(1,8,4),(1,4,4),(1,3,4),(1,2,3),(1,2,4)})", iter.next().toString());
         assertFalse(iter.hasNext());
         Util.deleteFile(cluster, tmpFile1.getCanonicalPath());
     }