diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala index e58b0ae64784..8c686e00278a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala @@ -1281,12 +1281,12 @@ class Analyzer( } if (attrMapping.isEmpty) { - newPlan -> attrMapping + newPlan -> attrMapping.toSeq } else { assert(!attrMapping.groupBy(_._1.exprId) .exists(_._2.map(_._2.exprId).distinct.length > 1), "Found duplicate rewrite attributes") - val attributeRewrites = AttributeMap(attrMapping) + val attributeRewrites = AttributeMap(attrMapping.toSeq) // Using attrMapping from the children plans to rewrite their parent node. // Note that we shouldn't rewrite a node using attrMapping from its sibling nodes. newPlan.transformExpressions { @@ -1294,7 +1294,7 @@ class Analyzer( dedupAttr(a, attributeRewrites) case s: SubqueryExpression => s.withNewPlan(dedupOuterReferencesInSubquery(s.plan, attributeRewrites)) - } -> attrMapping + } -> attrMapping.toSeq } } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala index b8da954d938c..eb7bf35ff287 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala @@ -949,7 +949,7 @@ object CombineUnions extends Rule[LogicalPlan] { flattened += child } } - union.copy(children = flattened) + union.copy(children = flattened.toSeq) } }