You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by hv...@apache.org on 2018/11/20 20:30:02 UTC
spark git commit: [SPARK-26084][SQL] Fixes unresolved
AggregateExpression.references exception
Repository: spark
Updated Branches:
refs/heads/master ab61ddb34 -> db136d360
[SPARK-26084][SQL] Fixes unresolved AggregateExpression.references exception
## What changes were proposed in this pull request?
This PR fixes an exception in `AggregateExpression.references` called on unresolved expressions. It implements the solution proposed in [SPARK-26084](https://issues.apache.org/jira/browse/SPARK-26084), a minor refactoring that removes the unnecessary dependence on `AttributeSet.toSeq`, which requires expression IDs and, therefore, can only execute successfully for resolved expressions.
The refactored implementation is both simpler and faster, eliminating the conversion of a `Set` to a
`Seq` and back to `Set`.
## How was this patch tested?
Added a new test based on the failing case in [SPARK-26084](https://issues.apache.org/jira/browse/SPARK-26084).
hvanhovell
Closes #23075 from ssimeonov/ss_SPARK-26084.
Authored-by: Simeon Simeonov <si...@fastignite.com>
Signed-off-by: Herman van Hovell <hv...@databricks.com>
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/db136d36
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/db136d36
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/db136d36
Branch: refs/heads/master
Commit: db136d360e54e13f1d7071a0428964a202cf7e31
Parents: ab61ddb
Author: Simeon Simeonov <si...@fastignite.com>
Authored: Tue Nov 20 21:29:56 2018 +0100
Committer: Herman van Hovell <hv...@databricks.com>
Committed: Tue Nov 20 21:29:56 2018 +0100
----------------------------------------------------------------------
.../expressions/aggregate/interfaces.scala | 8 ++---
.../aggregate/AggregateExpressionSuite.scala | 34 ++++++++++++++++++++
2 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/db136d36/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/interfaces.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/interfaces.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/interfaces.scala
index e1d16a2..56c2ee6 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/interfaces.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/interfaces.scala
@@ -128,12 +128,10 @@ case class AggregateExpression(
override def nullable: Boolean = aggregateFunction.nullable
override def references: AttributeSet = {
- val childReferences = mode match {
- case Partial | Complete => aggregateFunction.references.toSeq
- case PartialMerge | Final => aggregateFunction.aggBufferAttributes
+ mode match {
+ case Partial | Complete => aggregateFunction.references
+ case PartialMerge | Final => AttributeSet(aggregateFunction.aggBufferAttributes)
}
-
- AttributeSet(childReferences)
}
override def toString: String = {
http://git-wip-us.apache.org/repos/asf/spark/blob/db136d36/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/AggregateExpressionSuite.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/AggregateExpressionSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/AggregateExpressionSuite.scala
new file mode 100644
index 0000000..8e9c997
--- /dev/null
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/AggregateExpressionSuite.scala
@@ -0,0 +1,34 @@
+/*
+ * 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.spark.sql.catalyst.expressions.aggregate
+
+import org.apache.spark.SparkFunSuite
+import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute
+import org.apache.spark.sql.catalyst.expressions.{Add, AttributeSet}
+
+class AggregateExpressionSuite extends SparkFunSuite {
+
+ test("test references from unresolved aggregate functions") {
+ val x = UnresolvedAttribute("x")
+ val y = UnresolvedAttribute("y")
+ val actual = AggregateExpression(Sum(Add(x, y)), mode = Complete, isDistinct = false).references
+ val expected = AttributeSet(x :: y :: Nil)
+ assert(expected == actual, s"Expected: $expected. Actual: $actual")
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org