Skip to content

Commit 2225331

Browse files
committed
Aggregate expressions should not be foldable.
1 parent 16b5c90 commit 2225331

File tree

5 files changed

+11
-9
lines changed

5 files changed

+11
-9
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package org.apache.spark.sql.catalyst.expressions
2020
import org.apache.spark.sql.catalyst.InternalRow
2121
import org.apache.spark.sql.catalyst.analysis.{TypeCheckResult, UnresolvedAttribute}
2222
import org.apache.spark.sql.catalyst.expressions.codegen.{CodeGenContext, GeneratedExpressionCode}
23-
import org.apache.spark.sql.catalyst.trees
2423
import org.apache.spark.sql.catalyst.trees.TreeNode
2524
import org.apache.spark.sql.types._
2625

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregates.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package org.apache.spark.sql.catalyst.expressions
2020
import com.clearspring.analytics.stream.cardinality.HyperLogLog
2121

2222
import org.apache.spark.sql.catalyst.InternalRow
23-
import org.apache.spark.sql.catalyst.trees
2423
import org.apache.spark.sql.catalyst.errors.TreeNodeException
2524
import org.apache.spark.sql.catalyst.analysis.TypeCheckResult
2625
import org.apache.spark.sql.catalyst.util.TypeUtils
@@ -30,6 +29,11 @@ import org.apache.spark.util.collection.OpenHashSet
3029
trait AggregateExpression extends Expression {
3130
self: Product =>
3231

32+
/**
33+
* Aggregate expressions should not be foldable.
34+
*/
35+
override def foldable: Boolean = false
36+
3337
/**
3438
* Creates a new instance that can be used to compute this aggregate expression for a group
3539
* of input rows/

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ object ConstantFolding extends Rule[LogicalPlan] {
342342
case l: Literal => l
343343

344344
// Fold expressions that are foldable.
345-
case e if e.foldable => Literal.create(e.eval(null), e.dataType)
345+
case e if e.foldable => Literal.create(e.eval(EmptyRow), e.dataType)
346346

347347
// Fold "literal in (item1, item2, ..., literal, ...)" into true directly.
348348
case In(Literal(v, _), list) if list.exists {
@@ -361,7 +361,7 @@ object OptimizeIn extends Rule[LogicalPlan] {
361361
def apply(plan: LogicalPlan): LogicalPlan = plan transform {
362362
case q: LogicalPlan => q transformExpressionsDown {
363363
case In(v, list) if !list.exists(!_.isInstanceOf[Literal]) =>
364-
val hSet = list.map(e => e.eval(null))
364+
val hSet = list.map(e => e.eval(EmptyRow))
365365
InSet(v, HashSet() ++ hSet)
366366
}
367367
}

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LogicalPlan.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import org.apache.spark.sql.catalyst.analysis._
2323
import org.apache.spark.sql.catalyst.expressions._
2424
import org.apache.spark.sql.catalyst.plans.QueryPlan
2525
import org.apache.spark.sql.catalyst.trees.TreeNode
26-
import org.apache.spark.sql.catalyst.trees
2726

2827

2928
abstract class LogicalPlan extends QueryPlan[LogicalPlan] with Logging {

sql/core/src/main/scala/org/apache/spark/sql/execution/SparkPlan.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@
1717

1818
package org.apache.spark.sql.execution
1919

20-
import org.apache.spark.annotation.DeveloperApi
20+
import scala.collection.mutable.ArrayBuffer
21+
2122
import org.apache.spark.Logging
23+
import org.apache.spark.annotation.DeveloperApi
2224
import org.apache.spark.rdd.{RDD, RDDOperationScope}
2325
import org.apache.spark.sql.SQLContext
2426
import org.apache.spark.sql.catalyst.InternalRow
25-
import org.apache.spark.sql.catalyst.{CatalystTypeConverters, trees}
27+
import org.apache.spark.sql.catalyst.CatalystTypeConverters
2628
import org.apache.spark.sql.catalyst.expressions._
2729
import org.apache.spark.sql.Row
2830
import org.apache.spark.sql.catalyst.expressions.codegen._
2931
import org.apache.spark.sql.catalyst.plans.QueryPlan
3032
import org.apache.spark.sql.catalyst.plans.physical._
3133

32-
import scala.collection.mutable.ArrayBuffer
33-
3434
object SparkPlan {
3535
protected[sql] val currentContext = new ThreadLocal[SQLContext]()
3636
}

0 commit comments

Comments
 (0)