diff options
author | Liang-Chi Hsieh <viirya@gmail.com> | 2016-02-24 10:22:40 -0800 |
---|---|---|
committer | Michael Armbrust <michael@databricks.com> | 2016-02-24 10:22:40 -0800 |
commit | f3739869973ba4285196a61775d891292b8e282b (patch) | |
tree | 39bd49cdb3d9f23e92485ef4026d792650aadc19 /sql/core/src | |
parent | 89301818334185fd4f9881e5c0b123be94018e76 (diff) | |
download | spark-f3739869973ba4285196a61775d891292b8e282b.tar.gz spark-f3739869973ba4285196a61775d891292b8e282b.tar.bz2 spark-f3739869973ba4285196a61775d891292b8e282b.zip |
[SPARK-13383][SQL] Keep broadcast hint after column pruning
JIRA: https://issues.apache.org/jira/browse/SPARK-13383
## What changes were proposed in this pull request?
When we do column pruning in Optimizer, we put additional Project on top of a logical plan. However, when we already wrap a BroadcastHint on a logical plan, the added Project will hide BroadcastHint after later execution.
We should take care of BroadcastHint when we do column pruning.
## How was the this patch tested?
Unit test is added.
Author: Liang-Chi Hsieh <viirya@gmail.com>
Closes #11260 from viirya/keep-broadcasthint.
Diffstat (limited to 'sql/core/src')
-rw-r--r-- | sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala index 7347156398..247eb054a8 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala @@ -81,11 +81,13 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] { * Matches a plan whose output should be small enough to be used in broadcast join. */ object CanBroadcast { - def unapply(plan: LogicalPlan): Option[LogicalPlan] = plan match { - case BroadcastHint(p) => Some(p) - case p if sqlContext.conf.autoBroadcastJoinThreshold > 0 && - p.statistics.sizeInBytes <= sqlContext.conf.autoBroadcastJoinThreshold => Some(p) - case _ => None + def unapply(plan: LogicalPlan): Option[LogicalPlan] = { + if (sqlContext.conf.autoBroadcastJoinThreshold > 0 && + plan.statistics.sizeInBytes <= sqlContext.conf.autoBroadcastJoinThreshold) { + Some(plan) + } else { + None + } } } |