You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2016/07/24 16:21:29 UTC

hive git commit: HIVE-14285 : Explain outputs: map-entry ordering of non-primitive objects. (Zoltan Haindrich via Ashutosh Chauhan)

Repository: hive
Updated Branches:
  refs/heads/master c085d1f2b -> 5f9e6f037


HIVE-14285 :  Explain outputs: map-entry ordering of non-primitive objects.  (Zoltan Haindrich via Ashutosh Chauhan)

Signed-off-by: Ashutosh Chauhan <ha...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5f9e6f03
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5f9e6f03
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5f9e6f03

Branch: refs/heads/master
Commit: 5f9e6f037a54c27edcbfbf4b829ab330eb7ae60e
Parents: c085d1f
Author: Zoltan Haindrich <ki...@rxd.hu>
Authored: Sun Jul 24 09:20:14 2016 -0700
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Sun Jul 24 09:20:14 2016 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hive/ql/exec/ExplainTask.java |  29 +++-
 .../org/apache/hadoop/hive/ql/plan/MapWork.java |  25 ----
 .../hadoop/hive/ql/exec/TestExplainTask.java    | 141 +++++++++++++++++++
 .../results/clientpositive/smb_mapjoin_17.q.out |  12 +-
 .../clientpositive/spark/auto_join18.q.out      |   2 +-
 .../spark/auto_join18_multi_distinct.q.out      |   2 +-
 .../clientpositive/spark/auto_join27.q.out      |   2 +-
 .../spark/auto_smb_mapjoin_14.q.out             |   2 +-
 .../spark/cross_product_check_1.q.out           |   6 +-
 .../spark/dynamic_rdd_cache.q.out               |   6 +-
 .../clientpositive/spark/groupby10.q.out        |   4 +-
 .../clientpositive/spark/groupby11.q.out        |   2 +-
 .../groupby7_noskew_multi_single_reducer.q.out  |   2 +-
 ...pby_complex_types_multi_single_reducer.q.out |   2 +-
 .../clientpositive/spark/groupby_cube1.q.out    |   2 +-
 .../clientpositive/spark/groupby_position.q.out |   2 +-
 .../clientpositive/spark/groupby_rollup1.q.out  |   2 +-
 .../spark/groupby_sort_1_23.q.out               |   2 +-
 .../spark/groupby_sort_skew_1_23.q.out          |   2 +-
 .../results/clientpositive/spark/join18.q.out   |   2 +-
 .../spark/join18_multi_distinct.q.out           |   2 +-
 .../spark/join_cond_pushdown_2.q.out            |   2 +-
 .../spark/join_cond_pushdown_4.q.out            |   2 +-
 .../clientpositive/spark/join_merging.q.out     |   2 +-
 .../clientpositive/spark/limit_pushdown.q.out   |   2 +-
 .../spark/multi_insert_mixed.q.out              |   2 +-
 .../spark/optimize_nullscan.q.out               |   4 +-
 .../clientpositive/spark/ppd_join2.q.out        |   4 +-
 .../clientpositive/spark/ppd_join3.q.out        |   4 +-
 .../clientpositive/spark/ppd_join_filter.q.out  |   8 +-
 .../test/results/clientpositive/spark/ptf.q.out |   6 +-
 .../clientpositive/spark/skewjoinopt1.q.out     |   4 +-
 .../clientpositive/spark/skewjoinopt14.q.out    |   2 +-
 .../clientpositive/spark/skewjoinopt15.q.out    |   4 +-
 .../clientpositive/spark/skewjoinopt2.q.out     |   4 +-
 .../clientpositive/spark/smb_mapjoin_17.q.out   |  12 +-
 .../clientpositive/spark/smb_mapjoin_25.q.out   |   2 +-
 .../clientpositive/spark/subquery_in.q.out      |   8 +-
 .../spark/subquery_multiinsert.q.out            |   2 +-
 .../clientpositive/spark/tez_join_tests.q.out   |   2 +-
 .../spark/tez_joins_explain.q.out               |   2 +-
 .../results/clientpositive/spark/union17.q.out  |   4 +-
 .../results/clientpositive/spark/union25.q.out  |   2 +-
 .../results/clientpositive/spark/union3.q.out   |   2 +-
 .../results/clientpositive/spark/union31.q.out  |   2 +-
 .../clientpositive/spark/union_remove_23.q.out  |   2 +-
 .../spark/union_remove_6_subq.q.out             |   4 +-
 .../clientpositive/spark/vectorized_ptf.q.out   |   6 +-
 48 files changed, 246 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
index 46808d0..2515b2a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
@@ -375,8 +375,7 @@ public class ExplainTask extends Task<ExplainWork> implements Serializable {
   private JSONObject outputMap(Map<?, ?> mp, boolean hasHeader, PrintStream out,
       boolean extended, boolean jsonOutput, int indent) throws Exception {
 
-    TreeMap<Object, Object> tree = new TreeMap<Object, Object>();
-    tree.putAll(mp);
+    TreeMap<Object, Object> tree = getBasictypeKeyedMap(mp);
     JSONObject json = jsonOutput ? new JSONObject(new LinkedHashMap<>()) : null;
     if (out != null && hasHeader && !mp.isEmpty()) {
       out.println();
@@ -496,6 +495,32 @@ public class ExplainTask extends Task<ExplainWork> implements Serializable {
     return jsonOutput ? json : null;
   }
 
+  /**
+   * Retruns a map which have either primitive or string keys.
+   * 
+   * This is neccessary to discard object level comparators which may sort the objects based on some non-trivial logic.
+   * 
+   * @param mp
+   * @return
+   */
+  private TreeMap<Object, Object> getBasictypeKeyedMap(Map<?, ?> mp) {
+    TreeMap<Object, Object> ret = new TreeMap<Object, Object>();
+    if (mp.size() > 0) {
+      Object firstKey = mp.keySet().iterator().next();
+      if (firstKey.getClass().isPrimitive() || firstKey instanceof String) {
+        // keep it as-is
+        ret.putAll(mp);
+        return ret;
+      } else {
+        for (Entry<?, ?> entry : mp.entrySet()) {
+          // discard possibly type related sorting order and replace with alphabetical
+          ret.put(entry.getKey().toString(), entry.getValue());
+        }
+      }
+    }
+    return ret;
+  }
+
   private JSONArray outputList(List<?> l, PrintStream out, boolean hasHeader,
       boolean extended, boolean jsonOutput, int indent) throws Exception {
 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java
index 156e3bb..5cc3663 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java
@@ -153,20 +153,7 @@ public class MapWork extends BaseWork {
     super(name);
   }
 
-  
-  // HIVE-12244: this @Explain should be on the new method; but it changes the explain result
-  // HIVE-12244: example test which can be used to validate change: -Dtest=TestMiniLlapCliDriver -Dqfile=dynamic_partition_pruning.q
   @Explain(displayName = "Path -> Alias", explainLevels = { Level.EXTENDED })
-  @Deprecated
-  public LinkedHashMap<String, ArrayList<String>> getPathToAliasesOld() {
-    LinkedHashMap<String, ArrayList<String>> ret = new LinkedHashMap<>();
-    for (Entry<Path, ArrayList<String>> p2a : pathToAliases.entrySet()) {
-      ret.put(p2a.getKey().toString(), p2a.getValue());
-    }
-    return ret;
-  }
-  
-  // @Explain(displayName = "Path -> Alias", explainLevels = { Level.EXTENDED })
   public LinkedHashMap<Path, ArrayList<String>> getPathToAliases() {
     //
     return pathToAliases;
@@ -220,19 +207,7 @@ public class MapWork extends BaseWork {
     return trunPathToAliases;
   }
 
-  // HIVE-12244: this @Explain should be on the new method; but it changes the explain result
-  // HIVE-12244: example test which can be used to validate change: combine2.q
   @Explain(displayName = "Path -> Partition", explainLevels = { Level.EXTENDED })
-  @Deprecated
-  public LinkedHashMap<String, PartitionDesc> getPathToPartitionInfoOld() {
-    LinkedHashMap<String, PartitionDesc> ret = new LinkedHashMap<>();
-    for (Entry<Path, PartitionDesc> p2a : pathToPartitionInfo.entrySet()) {
-      ret.put(p2a.getKey().toString(), p2a.getValue());
-    }
-    return ret;
-  }
-
-  //@Explain(displayName = "Path -> Partition", explainLevels = { Level.EXTENDED })
   public LinkedHashMap<Path, PartitionDesc> getPathToPartitionInfo() {
     return pathToPartitionInfo;
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExplainTask.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExplainTask.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExplainTask.java
new file mode 100644
index 0000000..1da32fc
--- /dev/null
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExplainTask.java
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.ql.parse.ParseContext;
+import org.apache.hadoop.hive.ql.plan.Explain;
+import org.apache.hadoop.hive.ql.plan.Explain.Level;
+import org.apache.hadoop.hive.ql.plan.ExplainWork;
+import org.apache.hadoop.hive.ql.plan.TableScanDesc;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class TestExplainTask {
+
+  public static class DummyExplainDesc<K, V> extends TableScanDesc {
+    private static final long serialVersionUID = 1L;
+    private Map<K, V> explainResult;
+
+    public DummyExplainDesc(Map<K, V> explainResult) {
+      this.explainResult = explainResult;
+    }
+
+    @Explain(displayName = "test", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
+    public Map<K, V> explainMethod() {
+      return explainResult;
+    }
+  }
+
+  public static class DummyOperator extends TableScanOperator {
+    private static final long serialVersionUID = 1L;
+
+    public DummyOperator(TableScanDesc conf) {
+      super();
+      setConf(conf);
+    }
+
+  }
+
+  @Test
+  public void testExplainDoesSortTopLevelMapEntries() throws Exception {
+    LinkedHashMap<String, String> explainMap1 = new LinkedHashMap<>();
+    explainMap1.put("/k1", "v");
+    explainMap1.put("k3", "v");
+    explainMap1.put("hdfs:///k2", "v");
+    explainMap1.put("hdfs:///k1", "v");
+
+    LinkedHashMap<String, String> explainMap2 = new LinkedHashMap<>();
+    explainMap2.put("hdfs:///k1", "v");
+    explainMap2.put("hdfs:///k2", "v");
+    explainMap2.put("/k1", "v");
+    explainMap2.put("k3", "v");
+
+    String result1 = explainToString(explainMap1);
+    String result2 = explainToString(explainMap2);
+
+    assertEquals("both maps should be ordered, regardless of input order", result1, result2);
+  }
+
+  @Test
+  public void testExplainDoesSortPathAsStrings() throws Exception {
+    LinkedHashMap<String, String> explainMap1 = new LinkedHashMap<>();
+    explainMap1.put("/k1", "v");
+    explainMap1.put("k3", "v");
+    explainMap1.put("hdfs:/k2", "v");
+    explainMap1.put("hdfs:/k1", "v");
+
+    LinkedHashMap<Path, String> explainMap2 = new LinkedHashMap<>();
+    explainMap2.put(new Path("hdfs:/k1"), "v");
+    explainMap2.put(new Path("hdfs:/k2"), "v");
+    explainMap2.put(new Path("/k1"), "v");
+    explainMap2.put(new Path("k3"), "v");
+
+    String result1 = explainToString(explainMap1);
+    String result2 = explainToString(explainMap2);
+
+    assertEquals("both maps should be sorted the same way", result1, result2);
+  }
+
+  @Ignore("HIVE-14287 will fix this later")
+  @Test
+  public void testExplainDoesSortMapValues() throws Exception {
+    LinkedHashMap<String, String> explainMap1Val = new LinkedHashMap<>();
+    explainMap1Val.put("a", "v");
+    explainMap1Val.put("b", "v");
+
+    LinkedHashMap<String, Map<String, String>> explainMap1 = new LinkedHashMap<>();
+    explainMap1.put("k", explainMap1Val);
+
+    LinkedHashMap<String, String> explainMap2Val = new LinkedHashMap<>();
+    explainMap2Val.put("b", "v");
+    explainMap2Val.put("a", "v");
+
+    LinkedHashMap<String, Map<String, String>> explainMap2 = new LinkedHashMap<>();
+    explainMap2.put("k", explainMap2Val);
+
+    String result1 = explainToString(explainMap1);
+    String result2 = explainToString(explainMap2);
+
+    assertEquals("both maps should be sorted the same way", result1, result2);
+  }
+
+  private <K, V> String explainToString(Map<K, V> explainMap) throws Exception {
+    ExplainWork work = new ExplainWork();
+    ParseContext pCtx = new ParseContext();
+    HashMap<String, TableScanOperator> topOps = new HashMap<>();
+    TableScanOperator scanOp = new DummyOperator(new DummyExplainDesc<K, V>(explainMap));
+    topOps.put("sample", scanOp);
+    pCtx.setTopOps(topOps);
+    work.setParseContext(pCtx);
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    new ExplainTask().getJSONLogicalPlan(new PrintStream(baos), work);
+    baos.close();
+    return baos.toString();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/smb_mapjoin_17.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/smb_mapjoin_17.q.out b/ql/src/test/results/clientpositive/smb_mapjoin_17.q.out
index 69c8719..c1266c3 100644
--- a/ql/src/test/results/clientpositive/smb_mapjoin_17.q.out
+++ b/ql/src/test/results/clientpositive/smb_mapjoin_17.q.out
@@ -577,6 +577,12 @@ STAGE PLANS:
                 keys:
                   0 _col0 (type: int)
                   1 _col0 (type: int)
+                  10 _col0 (type: int)
+                  11 _col0 (type: int)
+                  12 _col0 (type: int)
+                  13 _col0 (type: int)
+                  14 _col0 (type: int)
+                  15 _col0 (type: int)
                   2 _col0 (type: int)
                   3 _col0 (type: int)
                   4 _col0 (type: int)
@@ -585,12 +591,6 @@ STAGE PLANS:
                   7 _col0 (type: int)
                   8 _col0 (type: int)
                   9 _col0 (type: int)
-                  10 _col0 (type: int)
-                  11 _col0 (type: int)
-                  12 _col0 (type: int)
-                  13 _col0 (type: int)
-                  14 _col0 (type: int)
-                  15 _col0 (type: int)
                 outputColumnNames: _col0, _col1
                 Reduce Output Operator
                   key expressions: _col0 (type: int)

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/auto_join18.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/auto_join18.q.out b/ql/src/test/results/clientpositive/spark/auto_join18.q.out
index ac6d7fb..1b6cc08 100644
--- a/ql/src/test/results/clientpositive/spark/auto_join18.q.out
+++ b/ql/src/test/results/clientpositive/spark/auto_join18.q.out
@@ -33,9 +33,9 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 6 <- Map 5 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Reducer 3 (GROUP, 1)
+        Reducer 6 <- Map 5 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/auto_join18_multi_distinct.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/auto_join18_multi_distinct.q.out b/ql/src/test/results/clientpositive/spark/auto_join18_multi_distinct.q.out
index dc353ba..17f0d88 100644
--- a/ql/src/test/results/clientpositive/spark/auto_join18_multi_distinct.q.out
+++ b/ql/src/test/results/clientpositive/spark/auto_join18_multi_distinct.q.out
@@ -35,9 +35,9 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 6 <- Map 5 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Reducer 3 (GROUP, 1)
+        Reducer 6 <- Map 5 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/auto_join27.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/auto_join27.q.out b/ql/src/test/results/clientpositive/spark/auto_join27.q.out
index c0d8575..8e85e3d 100644
--- a/ql/src/test/results/clientpositive/spark/auto_join27.q.out
+++ b/ql/src/test/results/clientpositive/spark/auto_join27.q.out
@@ -31,8 +31,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
-        Reducer 5 <- Map 4 (GROUP, 2)
         Reducer 3 <- Reducer 2 (GROUP, 1)
+        Reducer 5 <- Map 4 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/auto_smb_mapjoin_14.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/auto_smb_mapjoin_14.q.out b/ql/src/test/results/clientpositive/spark/auto_smb_mapjoin_14.q.out
index 102798c..0e99972 100644
--- a/ql/src/test/results/clientpositive/spark/auto_smb_mapjoin_14.q.out
+++ b/ql/src/test/results/clientpositive/spark/auto_smb_mapjoin_14.q.out
@@ -304,8 +304,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 1)
-        Reducer 5 <- Map 1 (GROUP, 1)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 1), Reducer 5 (PARTITION-LEVEL SORT, 1)
+        Reducer 5 <- Map 1 (GROUP, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/cross_product_check_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/cross_product_check_1.q.out b/ql/src/test/results/clientpositive/spark/cross_product_check_1.q.out
index 2e4cee1..8383f97 100644
--- a/ql/src/test/results/clientpositive/spark/cross_product_check_1.q.out
+++ b/ql/src/test/results/clientpositive/spark/cross_product_check_1.q.out
@@ -221,9 +221,9 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Reducer 5 (PARTITION-LEVEL SORT, 1)
         Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Reducer 5 (PARTITION-LEVEL SORT, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -342,9 +342,9 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Reducer 5 (PARTITION-LEVEL SORT, 1)
         Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 1), Map 6 (PARTITION-LEVEL SORT, 1)
         Reducer 5 <- Reducer 4 (GROUP, 2)
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Reducer 5 (PARTITION-LEVEL SORT, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -456,9 +456,9 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
+        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 1), Reducer 6 (PARTITION-LEVEL SORT, 1)
         Reducer 5 <- Map 4 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 6 <- Reducer 5 (GROUP, 2)
-        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 1), Reducer 6 (PARTITION-LEVEL SORT, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/dynamic_rdd_cache.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/dynamic_rdd_cache.q.out b/ql/src/test/results/clientpositive/spark/dynamic_rdd_cache.q.out
index 78976ec..d4530e2 100644
--- a/ql/src/test/results/clientpositive/spark/dynamic_rdd_cache.q.out
+++ b/ql/src/test/results/clientpositive/spark/dynamic_rdd_cache.q.out
@@ -33,10 +33,10 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 31)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 31)
-        Reducer 8 <- Map 5 (PARTITION-LEVEL SORT, 31)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 31), Reducer 6 (PARTITION-LEVEL SORT, 31), Reducer 8 (PARTITION-LEVEL SORT, 31)
         Reducer 4 <- Reducer 3 (GROUP, 31)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 31)
+        Reducer 8 <- Map 5 (PARTITION-LEVEL SORT, 31)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -716,10 +716,10 @@ STAGE PLANS:
         Reducer 12 <- Map 11 (PARTITION-LEVEL SORT, 31), Map 16 (PARTITION-LEVEL SORT, 31)
         Reducer 13 <- Map 17 (PARTITION-LEVEL SORT, 31), Reducer 12 (PARTITION-LEVEL SORT, 31)
         Reducer 14 <- Map 18 (PARTITION-LEVEL SORT, 31), Reducer 13 (PARTITION-LEVEL SORT, 31)
+        Reducer 15 <- Reducer 14 (GROUP, 31)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 31), Map 8 (PARTITION-LEVEL SORT, 31)
         Reducer 3 <- Map 9 (PARTITION-LEVEL SORT, 31), Reducer 2 (PARTITION-LEVEL SORT, 31)
         Reducer 4 <- Map 10 (PARTITION-LEVEL SORT, 31), Reducer 3 (PARTITION-LEVEL SORT, 31)
-        Reducer 15 <- Reducer 14 (GROUP, 31)
         Reducer 5 <- Reducer 4 (GROUP, 31)
         Reducer 6 <- Reducer 15 (PARTITION-LEVEL SORT, 31), Reducer 5 (PARTITION-LEVEL SORT, 31)
         Reducer 7 <- Reducer 6 (SORT, 1)

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby10.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby10.q.out b/ql/src/test/results/clientpositive/spark/groupby10.q.out
index 70c8f9e..7b1e616 100644
--- a/ql/src/test/results/clientpositive/spark/groupby10.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby10.q.out
@@ -56,8 +56,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2)
+        Reducer 4 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
@@ -268,8 +268,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2)
+        Reducer 4 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby11.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby11.q.out b/ql/src/test/results/clientpositive/spark/groupby11.q.out
index a0d0139..eefbc91 100644
--- a/ql/src/test/results/clientpositive/spark/groupby11.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby11.q.out
@@ -44,8 +44,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2)
+        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby7_noskew_multi_single_reducer.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby7_noskew_multi_single_reducer.q.out b/ql/src/test/results/clientpositive/spark/groupby7_noskew_multi_single_reducer.q.out
index d6514c9..750a3fe 100644
--- a/ql/src/test/results/clientpositive/spark/groupby7_noskew_multi_single_reducer.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby7_noskew_multi_single_reducer.q.out
@@ -39,9 +39,9 @@ STAGE PLANS:
   Stage: Stage-2
     Spark
       Edges:
-        Reducer 5 <- Map 1 (GROUP PARTITION-LEVEL SORT, 31)
         Reducer 3 <- Reducer 5 (SORT, 1)
         Reducer 4 <- Reducer 5 (SORT, 1)
+        Reducer 5 <- Map 1 (GROUP PARTITION-LEVEL SORT, 31)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_complex_types_multi_single_reducer.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_complex_types_multi_single_reducer.q.out b/ql/src/test/results/clientpositive/spark/groupby_complex_types_multi_single_reducer.q.out
index e849cbe..7fccb4f 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_complex_types_multi_single_reducer.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_complex_types_multi_single_reducer.q.out
@@ -40,8 +40,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP, 2)
-        Reducer 4 <- Map 7 (GROUP, 2)
         Reducer 3 <- Reducer 2 (SORT, 1)
+        Reducer 4 <- Map 7 (GROUP, 2)
         Reducer 5 <- Reducer 4 (SORT, 1)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out b/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
index 938e756..d2bd3e8 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
@@ -514,8 +514,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_position.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_position.q.out b/ql/src/test/results/clientpositive/spark/groupby_position.q.out
index 137d6a1..b9be5ea 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_position.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_position.q.out
@@ -553,9 +553,9 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (GROUP, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Reducer 3 (SORT, 1)
+        Reducer 6 <- Map 5 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_rollup1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_rollup1.q.out b/ql/src/test/results/clientpositive/spark/groupby_rollup1.q.out
index 6ea7e97..15d6c23 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_rollup1.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_rollup1.q.out
@@ -412,8 +412,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_sort_1_23.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_sort_1_23.q.out b/ql/src/test/results/clientpositive/spark/groupby_sort_1_23.q.out
index 4c4ae03..408c1b9 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_sort_1_23.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_sort_1_23.q.out
@@ -2594,8 +2594,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/groupby_sort_skew_1_23.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_sort_skew_1_23.q.out b/ql/src/test/results/clientpositive/spark/groupby_sort_skew_1_23.q.out
index e575e97..6325889 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_sort_skew_1_23.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_sort_skew_1_23.q.out
@@ -2689,9 +2689,9 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Map 3 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/join18.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/join18.q.out b/ql/src/test/results/clientpositive/spark/join18.q.out
index e0a3b4b..8e97853 100644
--- a/ql/src/test/results/clientpositive/spark/join18.q.out
+++ b/ql/src/test/results/clientpositive/spark/join18.q.out
@@ -37,8 +37,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 5 <- Map 4 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 4 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/join18_multi_distinct.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/join18_multi_distinct.q.out b/ql/src/test/results/clientpositive/spark/join18_multi_distinct.q.out
index a95a1a2..e7758b1 100644
--- a/ql/src/test/results/clientpositive/spark/join18_multi_distinct.q.out
+++ b/ql/src/test/results/clientpositive/spark/join18_multi_distinct.q.out
@@ -39,8 +39,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 5 <- Map 4 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 4 (GROUP PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/join_cond_pushdown_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/join_cond_pushdown_2.q.out b/ql/src/test/results/clientpositive/spark/join_cond_pushdown_2.q.out
index d5f1f34..8e32a50 100644
--- a/ql/src/test/results/clientpositive/spark/join_cond_pushdown_2.q.out
+++ b/ql/src/test/results/clientpositive/spark/join_cond_pushdown_2.q.out
@@ -12,8 +12,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 5 <- Map 4 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 3 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 4 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/join_cond_pushdown_4.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/join_cond_pushdown_4.q.out b/ql/src/test/results/clientpositive/spark/join_cond_pushdown_4.q.out
index a7c6643..d52d6a7 100644
--- a/ql/src/test/results/clientpositive/spark/join_cond_pushdown_4.q.out
+++ b/ql/src/test/results/clientpositive/spark/join_cond_pushdown_4.q.out
@@ -14,8 +14,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 5 <- Map 4 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 3 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 4 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/join_merging.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/join_merging.q.out b/ql/src/test/results/clientpositive/spark/join_merging.q.out
index 1964325..5dbc83f 100644
--- a/ql/src/test/results/clientpositive/spark/join_merging.q.out
+++ b/ql/src/test/results/clientpositive/spark/join_merging.q.out
@@ -114,8 +114,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/limit_pushdown.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/limit_pushdown.q.out b/ql/src/test/results/clientpositive/spark/limit_pushdown.q.out
index a978765..67c6e70 100644
--- a/ql/src/test/results/clientpositive/spark/limit_pushdown.q.out
+++ b/ql/src/test/results/clientpositive/spark/limit_pushdown.q.out
@@ -887,9 +887,9 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP PARTITION-LEVEL SORT, 1)
+        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Map 4 (GROUP, 2)
         Reducer 6 <- Reducer 5 (GROUP, 1)
-        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/multi_insert_mixed.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/multi_insert_mixed.q.out b/ql/src/test/results/clientpositive/spark/multi_insert_mixed.q.out
index fc38565..bc9473a 100644
--- a/ql/src/test/results/clientpositive/spark/multi_insert_mixed.q.out
+++ b/ql/src/test/results/clientpositive/spark/multi_insert_mixed.q.out
@@ -54,8 +54,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 6 (GROUP, 2)
-        Reducer 4 <- Map 7 (GROUP, 2)
         Reducer 3 <- Reducer 2 (SORT, 1)
+        Reducer 4 <- Map 7 (GROUP, 2)
         Reducer 5 <- Reducer 4 (SORT, 1)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out b/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
index afd65c7..67730a3 100644
--- a/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
+++ b/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
@@ -147,8 +147,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 1)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -912,8 +912,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 1)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Reducer 4 (PARTITION-LEVEL SORT, 1)
+        Reducer 4 <- Map 3 (GROUP, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/ppd_join2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/ppd_join2.q.out b/ql/src/test/results/clientpositive/spark/ppd_join2.q.out
index 61382da..a6b5d57 100644
--- a/ql/src/test/results/clientpositive/spark/ppd_join2.q.out
+++ b/ql/src/test/results/clientpositive/spark/ppd_join2.q.out
@@ -34,8 +34,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -1718,8 +1718,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/ppd_join3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/ppd_join3.q.out b/ql/src/test/results/clientpositive/spark/ppd_join3.q.out
index fc60d8b..6567587 100644
--- a/ql/src/test/results/clientpositive/spark/ppd_join3.q.out
+++ b/ql/src/test/results/clientpositive/spark/ppd_join3.q.out
@@ -34,8 +34,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -1774,8 +1774,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2), Map 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/ppd_join_filter.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/ppd_join_filter.q.out b/ql/src/test/results/clientpositive/spark/ppd_join_filter.q.out
index fbba885..3efff3c 100644
--- a/ql/src/test/results/clientpositive/spark/ppd_join_filter.q.out
+++ b/ql/src/test/results/clientpositive/spark/ppd_join_filter.q.out
@@ -32,8 +32,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -319,8 +319,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -606,8 +606,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -893,8 +893,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/ptf.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/ptf.q.out b/ql/src/test/results/clientpositive/spark/ptf.q.out
index 0640ca3..fd3533c 100644
--- a/ql/src/test/results/clientpositive/spark/ptf.q.out
+++ b/ql/src/test/results/clientpositive/spark/ptf.q.out
@@ -1198,8 +1198,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -2903,11 +2903,11 @@ STAGE PLANS:
   Stage: Stage-2
     Spark
       Edges:
-        Reducer 6 <- Map 1 (PARTITION-LEVEL SORT, 2)
-        Reducer 7 <- Map 1 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Reducer 7 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 6 <- Map 1 (PARTITION-LEVEL SORT, 2)
+        Reducer 7 <- Map 1 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/skewjoinopt1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/skewjoinopt1.q.out b/ql/src/test/results/clientpositive/spark/skewjoinopt1.q.out
index 1a6d5e5..4558c1d 100644
--- a/ql/src/test/results/clientpositive/spark/skewjoinopt1.q.out
+++ b/ql/src/test/results/clientpositive/spark/skewjoinopt1.q.out
@@ -351,8 +351,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 1), Reducer 6 (GROUP, 1)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -500,8 +500,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 1), Reducer 6 (GROUP, 1)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/skewjoinopt14.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/skewjoinopt14.q.out b/ql/src/test/results/clientpositive/spark/skewjoinopt14.q.out
index 36b7306..ffba6ee 100644
--- a/ql/src/test/results/clientpositive/spark/skewjoinopt14.q.out
+++ b/ql/src/test/results/clientpositive/spark/skewjoinopt14.q.out
@@ -87,8 +87,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 7 <- Map 6 (PARTITION-LEVEL SORT, 2), Map 8 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Map 5 (PARTITION-LEVEL SORT, 2), Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 7 (PARTITION-LEVEL SORT, 2)
+        Reducer 7 <- Map 6 (PARTITION-LEVEL SORT, 2), Map 8 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/skewjoinopt15.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/skewjoinopt15.q.out b/ql/src/test/results/clientpositive/spark/skewjoinopt15.q.out
index db09de2..3851107 100644
--- a/ql/src/test/results/clientpositive/spark/skewjoinopt15.q.out
+++ b/ql/src/test/results/clientpositive/spark/skewjoinopt15.q.out
@@ -391,8 +391,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 1), Reducer 6 (GROUP, 1)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -540,8 +540,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 1), Reducer 6 (GROUP, 1)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/skewjoinopt2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/skewjoinopt2.q.out b/ql/src/test/results/clientpositive/spark/skewjoinopt2.q.out
index 8c255d4..85e0a6c 100644
--- a/ql/src/test/results/clientpositive/spark/skewjoinopt2.q.out
+++ b/ql/src/test/results/clientpositive/spark/skewjoinopt2.q.out
@@ -349,8 +349,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2), Reducer 6 (GROUP, 2)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -508,8 +508,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2), Reducer 6 (GROUP, 2)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 2), Map 7 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/smb_mapjoin_17.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/smb_mapjoin_17.q.out b/ql/src/test/results/clientpositive/spark/smb_mapjoin_17.q.out
index da0cb2d..a658ebd 100644
--- a/ql/src/test/results/clientpositive/spark/smb_mapjoin_17.q.out
+++ b/ql/src/test/results/clientpositive/spark/smb_mapjoin_17.q.out
@@ -691,6 +691,12 @@ STAGE PLANS:
                       keys:
                         0 _col0 (type: int)
                         1 _col0 (type: int)
+                        10 _col0 (type: int)
+                        11 _col0 (type: int)
+                        12 _col0 (type: int)
+                        13 _col0 (type: int)
+                        14 _col0 (type: int)
+                        15 _col0 (type: int)
                         2 _col0 (type: int)
                         3 _col0 (type: int)
                         4 _col0 (type: int)
@@ -699,12 +705,6 @@ STAGE PLANS:
                         7 _col0 (type: int)
                         8 _col0 (type: int)
                         9 _col0 (type: int)
-                        10 _col0 (type: int)
-                        11 _col0 (type: int)
-                        12 _col0 (type: int)
-                        13 _col0 (type: int)
-                        14 _col0 (type: int)
-                        15 _col0 (type: int)
                       outputColumnNames: _col0, _col1
                       Statistics: Num rows: 165 Data size: 1155 Basic stats: COMPLETE Column stats: NONE
                       Map Join Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/smb_mapjoin_25.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/smb_mapjoin_25.q.out b/ql/src/test/results/clientpositive/spark/smb_mapjoin_25.q.out
index 6241df7..96e7731 100644
--- a/ql/src/test/results/clientpositive/spark/smb_mapjoin_25.q.out
+++ b/ql/src/test/results/clientpositive/spark/smb_mapjoin_25.q.out
@@ -64,8 +64,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 1), Map 4 (PARTITION-LEVEL SORT, 1)
-        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 1), Map 7 (PARTITION-LEVEL SORT, 1)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 1), Reducer 6 (PARTITION-LEVEL SORT, 1)
+        Reducer 6 <- Map 5 (PARTITION-LEVEL SORT, 1), Map 7 (PARTITION-LEVEL SORT, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/subquery_in.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/subquery_in.q.out b/ql/src/test/results/clientpositive/spark/subquery_in.q.out
index c6a4df6..f290c02 100644
--- a/ql/src/test/results/clientpositive/spark/subquery_in.q.out
+++ b/ql/src/test/results/clientpositive/spark/subquery_in.q.out
@@ -265,9 +265,9 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 1)
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -434,9 +434,9 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (GROUP, 2)
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -618,8 +618,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -774,8 +774,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (GROUP, 2)
         Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 6 (PARTITION-LEVEL SORT, 2)
+        Reducer 6 <- Map 5 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/subquery_multiinsert.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/subquery_multiinsert.q.out b/ql/src/test/results/clientpositive/spark/subquery_multiinsert.q.out
index cadab04..b1d225c 100644
--- a/ql/src/test/results/clientpositive/spark/subquery_multiinsert.q.out
+++ b/ql/src/test/results/clientpositive/spark/subquery_multiinsert.q.out
@@ -74,9 +74,9 @@ STAGE PLANS:
       Edges:
         Reducer 2 <- Map 10 (PARTITION-LEVEL SORT, 1), Reducer 9 (PARTITION-LEVEL SORT, 1)
         Reducer 3 <- Map 7 (PARTITION-LEVEL SORT, 2), Reducer 2 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Reducer 3 (SORT, 1)
         Reducer 5 <- Map 11 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
         Reducer 9 <- Map 8 (GROUP, 1)
-        Reducer 4 <- Reducer 3 (SORT, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 10 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/tez_join_tests.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/tez_join_tests.q.out b/ql/src/test/results/clientpositive/spark/tez_join_tests.q.out
index 8ab4c70..1c3e264 100644
--- a/ql/src/test/results/clientpositive/spark/tez_join_tests.q.out
+++ b/ql/src/test/results/clientpositive/spark/tez_join_tests.q.out
@@ -17,8 +17,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 7 (PARTITION-LEVEL SORT, 2), Reducer 3 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (SORT, 1)
+        Reducer 4 <- Map 7 (PARTITION-LEVEL SORT, 2), Reducer 3 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (SORT, 1)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/tez_joins_explain.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/tez_joins_explain.q.out b/ql/src/test/results/clientpositive/spark/tez_joins_explain.q.out
index a461502..345c96b 100644
--- a/ql/src/test/results/clientpositive/spark/tez_joins_explain.q.out
+++ b/ql/src/test/results/clientpositive/spark/tez_joins_explain.q.out
@@ -15,8 +15,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 6 (PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 7 (PARTITION-LEVEL SORT, 2), Reducer 3 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 2 (SORT, 1)
+        Reducer 4 <- Map 7 (PARTITION-LEVEL SORT, 2), Reducer 3 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (SORT, 1)
 #### A masked pattern was here ####
       Vertices:

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union17.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union17.q.out b/ql/src/test/results/clientpositive/spark/union17.q.out
index eaeb996..ce23773 100644
--- a/ql/src/test/results/clientpositive/spark/union17.q.out
+++ b/ql/src/test/results/clientpositive/spark/union17.q.out
@@ -45,10 +45,10 @@ STAGE PLANS:
   Stage: Stage-2
     Spark
       Edges:
-        Reducer 8 <- Map 1 (GROUP, 1)
-        Reducer 9 <- Map 1 (GROUP, 1)
         Reducer 3 <- Map 6 (GROUP PARTITION-LEVEL SORT, 2), Reducer 8 (GROUP PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Map 7 (GROUP PARTITION-LEVEL SORT, 2), Reducer 9 (GROUP PARTITION-LEVEL SORT, 2)
+        Reducer 8 <- Map 1 (GROUP, 1)
+        Reducer 9 <- Map 1 (GROUP, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union25.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union25.q.out b/ql/src/test/results/clientpositive/spark/union25.q.out
index a8b89d6..65f1c4c 100644
--- a/ql/src/test/results/clientpositive/spark/union25.q.out
+++ b/ql/src/test/results/clientpositive/spark/union25.q.out
@@ -66,8 +66,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (GROUP, 2), Map 3 (GROUP, 2)
         Reducer 2 <- Map 1 (GROUP, 2), Reducer 4 (GROUP, 2)
+        Reducer 4 <- Map 3 (GROUP, 2), Map 3 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union3.q.out b/ql/src/test/results/clientpositive/spark/union3.q.out
index 6fdef3e..e518c4e 100644
--- a/ql/src/test/results/clientpositive/spark/union3.q.out
+++ b/ql/src/test/results/clientpositive/spark/union3.q.out
@@ -45,10 +45,10 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 1)
+        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2), Reducer 7 (PARTITION-LEVEL SORT, 2), Reducer 9 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Map 1 (GROUP, 1)
         Reducer 7 <- Map 1 (GROUP, 1)
         Reducer 9 <- Map 1 (GROUP, 1)
-        Reducer 3 <- Reducer 2 (PARTITION-LEVEL SORT, 2), Reducer 5 (PARTITION-LEVEL SORT, 2), Reducer 7 (PARTITION-LEVEL SORT, 2), Reducer 9 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union31.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union31.q.out b/ql/src/test/results/clientpositive/spark/union31.q.out
index bbe49aa..a1f29eb 100644
--- a/ql/src/test/results/clientpositive/spark/union31.q.out
+++ b/ql/src/test/results/clientpositive/spark/union31.q.out
@@ -366,8 +366,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 5 <- Map 4 (GROUP, 2)
         Reducer 3 <- Reducer 2 (GROUP PARTITION-LEVEL SORT, 2), Reducer 5 (GROUP PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 4 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union_remove_23.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union_remove_23.q.out b/ql/src/test/results/clientpositive/spark/union_remove_23.q.out
index ea2e0b5..34621b1 100644
--- a/ql/src/test/results/clientpositive/spark/union_remove_23.q.out
+++ b/ql/src/test/results/clientpositive/spark/union_remove_23.q.out
@@ -73,8 +73,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 4 (PARTITION-LEVEL SORT, 2)
-        Reducer 6 <- Map 5 (GROUP, 2)
         Reducer 3 <- Reducer 2 (GROUP, 2)
+        Reducer 6 <- Map 5 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/union_remove_6_subq.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union_remove_6_subq.q.out b/ql/src/test/results/clientpositive/spark/union_remove_6_subq.q.out
index 3c88c95..0a6dc87 100644
--- a/ql/src/test/results/clientpositive/spark/union_remove_6_subq.q.out
+++ b/ql/src/test/results/clientpositive/spark/union_remove_6_subq.q.out
@@ -264,8 +264,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 1)
-        Reducer 5 <- Map 1 (GROUP, 1)
         Reducer 3 <- Reducer 2 (GROUP, 1), Reducer 5 (GROUP, 1)
+        Reducer 5 <- Map 1 (GROUP, 1)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -383,8 +383,8 @@ STAGE PLANS:
     Spark
       Edges:
         Reducer 2 <- Map 1 (GROUP, 2)
-        Reducer 5 <- Map 1 (GROUP, 2)
         Reducer 3 <- Reducer 2 (GROUP PARTITION-LEVEL SORT, 2), Reducer 5 (GROUP PARTITION-LEVEL SORT, 2)
+        Reducer 5 <- Map 1 (GROUP, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 

http://git-wip-us.apache.org/repos/asf/hive/blob/5f9e6f03/ql/src/test/results/clientpositive/spark/vectorized_ptf.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/vectorized_ptf.q.out b/ql/src/test/results/clientpositive/spark/vectorized_ptf.q.out
index f4b9584..2ab2541 100644
--- a/ql/src/test/results/clientpositive/spark/vectorized_ptf.q.out
+++ b/ql/src/test/results/clientpositive/spark/vectorized_ptf.q.out
@@ -1960,8 +1960,8 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
         Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -4464,11 +4464,11 @@ STAGE PLANS:
   Stage: Stage-2
     Spark
       Edges:
-        Reducer 6 <- Map 1 (PARTITION-LEVEL SORT, 2)
-        Reducer 7 <- Map 1 (PARTITION-LEVEL SORT, 2)
         Reducer 3 <- Reducer 6 (PARTITION-LEVEL SORT, 2)
         Reducer 4 <- Reducer 7 (PARTITION-LEVEL SORT, 2)
         Reducer 5 <- Reducer 4 (PARTITION-LEVEL SORT, 2)
+        Reducer 6 <- Map 1 (PARTITION-LEVEL SORT, 2)
+        Reducer 7 <- Map 1 (PARTITION-LEVEL SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1