[ 
https://issues.apache.org/jira/browse/SPARK-14830?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dongjoon Hyun updated SPARK-14830:
----------------------------------
    Description: 
This issue aims to optimize GroupExpressions by removing repeating expressions. 

**Before**
{code}
scala> sql("select a+1 from values 1,2 T(a) group by a+1, 1+a, A+1, 
1+A").explain()
== Physical Plan ==
WholeStageCodegen
:  +- TungstenAggregate(key=[(a#0 + 1)#6,(1 + a#0)#7,(A#0 + 1)#8,(1 + A#0)#9], 
functions=[], output=[(a + 1)#5])
:     +- INPUT
+- Exchange hashpartitioning((a#0 + 1)#6, (1 + a#0)#7, (A#0 + 1)#8, (1 + 
A#0)#9, 200), None
   +- WholeStageCodegen
      :  +- TungstenAggregate(key=[(a#0 + 1) AS (a#0 + 1)#6,(1 + a#0) AS (1 + 
a#0)#7,(A#0 + 1) AS (A#0 + 1)#8,(1 + A#0) AS (1 + A#0)#9], functions=[], 
output=[(a#0 + 1)#6,(1 + a#0)#7,(A#0 + 1)#8,(1 + A#0)#9])
      :     +- INPUT
      +- LocalTableScan [a#0], [[1],[2]]
{code}

**After**
{code}
scala> sql("select a+1 from values 1,2 T(a) group by a+1, 1+a, A+1, 
1+A").explain()
== Physical Plan ==
WholeStageCodegen
:  +- TungstenAggregate(key=[(a#0 + 1)#6], functions=[], output=[(a + 1)#5])
:     +- INPUT
+- Exchange hashpartitioning((a#0 + 1)#6, 200), None
   +- WholeStageCodegen
      :  +- TungstenAggregate(key=[(a#0 + 1) AS (a#0 + 1)#6], functions=[], 
output=[(a#0 + 1)#6])
      :     +- INPUT
      +- LocalTableScan [a#0], [[1],[2]]
{code}

  was:
This issue aims to optimize GroupExpressions by removing repeating expressions. 

**Before**
{code}
scala> sql("select a from (select explode(array(1,2)) a) T group by a, a, 
a").explain()
== Physical Plan ==
WholeStageCodegen
:  +- TungstenAggregate(key=[a#5,a#5,a#5], functions=[], output=[a#5])
:     +- INPUT
+- Exchange hashpartitioning(a#5, a#5, a#5, 200), None
   +- WholeStageCodegen
      :  +- TungstenAggregate(key=[a#5,a#5,a#5], functions=[], 
output=[a#5,a#5,a#5])
      :     +- INPUT
      +- Generate explode([1,2]), false, false, [a#5]
         +- Scan OneRowRelation[]
{code}

**After**
{code}
scala> sql("select a from (select explode(array(1,2)) a) T group by a, a, 
a").explain()
== Physical Plan ==
WholeStageCodegen
:  +- TungstenAggregate(key=[a#5], functions=[], output=[a#5])
:     +- INPUT
+- Exchange hashpartitioning(a#5, 200), None
   +- WholeStageCodegen
      :  +- TungstenAggregate(key=[a#5], functions=[], output=[a#5])
      :     +- INPUT
      +- Generate explode([1,2]), false, false, [a#5]
         +- Scan OneRowRelation[]
{code}


> Add RemoveRepetitionFromGroupExpressions optimizer
> --------------------------------------------------
>
>                 Key: SPARK-14830
>                 URL: https://issues.apache.org/jira/browse/SPARK-14830
>             Project: Spark
>          Issue Type: Improvement
>          Components: Optimizer
>            Reporter: Dongjoon Hyun
>
> This issue aims to optimize GroupExpressions by removing repeating 
> expressions. 
> **Before**
> {code}
> scala> sql("select a+1 from values 1,2 T(a) group by a+1, 1+a, A+1, 
> 1+A").explain()
> == Physical Plan ==
> WholeStageCodegen
> :  +- TungstenAggregate(key=[(a#0 + 1)#6,(1 + a#0)#7,(A#0 + 1)#8,(1 + 
> A#0)#9], functions=[], output=[(a + 1)#5])
> :     +- INPUT
> +- Exchange hashpartitioning((a#0 + 1)#6, (1 + a#0)#7, (A#0 + 1)#8, (1 + 
> A#0)#9, 200), None
>    +- WholeStageCodegen
>       :  +- TungstenAggregate(key=[(a#0 + 1) AS (a#0 + 1)#6,(1 + a#0) AS (1 + 
> a#0)#7,(A#0 + 1) AS (A#0 + 1)#8,(1 + A#0) AS (1 + A#0)#9], functions=[], 
> output=[(a#0 + 1)#6,(1 + a#0)#7,(A#0 + 1)#8,(1 + A#0)#9])
>       :     +- INPUT
>       +- LocalTableScan [a#0], [[1],[2]]
> {code}
> **After**
> {code}
> scala> sql("select a+1 from values 1,2 T(a) group by a+1, 1+a, A+1, 
> 1+A").explain()
> == Physical Plan ==
> WholeStageCodegen
> :  +- TungstenAggregate(key=[(a#0 + 1)#6], functions=[], output=[(a + 1)#5])
> :     +- INPUT
> +- Exchange hashpartitioning((a#0 + 1)#6, 200), None
>    +- WholeStageCodegen
>       :  +- TungstenAggregate(key=[(a#0 + 1) AS (a#0 + 1)#6], functions=[], 
> output=[(a#0 + 1)#6])
>       :     +- INPUT
>       +- LocalTableScan [a#0], [[1],[2]]
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to