Skip to content

Commit a89e8b6

Browse files
cloud-fanAndrew Or
authored andcommitted
[SPARK-10477][SQL] using DSL in ColumnPruningSuite to improve readability
Author: Wenchen Fan <[email protected]> Closes apache#8645 from cloud-fan/test.
1 parent c5b6b39 commit a89e8b6

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/dsl/package.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,14 @@ package object dsl {
275275

276276
def unionAll(otherPlan: LogicalPlan): LogicalPlan = Union(logicalPlan, otherPlan)
277277

278-
// TODO specify the output column names
279278
def generate(
280279
generator: Generator,
281280
join: Boolean = false,
282281
outer: Boolean = false,
283-
alias: Option[String] = None): LogicalPlan =
284-
Generate(generator, join = join, outer = outer, alias, Nil, logicalPlan)
282+
alias: Option[String] = None,
283+
outputNames: Seq[String] = Nil): LogicalPlan =
284+
Generate(generator, join = join, outer = outer, alias,
285+
outputNames.map(UnresolvedAttribute(_)), logicalPlan)
285286

286287
def insertInto(tableName: String, overwrite: Boolean = false): LogicalPlan =
287288
InsertIntoTable(

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ColumnPruningSuite.scala

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package org.apache.spark.sql.catalyst.optimizer
1919

2020
import org.apache.spark.sql.catalyst.expressions.Explode
2121
import org.apache.spark.sql.catalyst.plans.PlanTest
22-
import org.apache.spark.sql.catalyst.plans.logical.{Project, LocalRelation, Generate, LogicalPlan}
22+
import org.apache.spark.sql.catalyst.plans.logical.{LocalRelation, LogicalPlan}
2323
import org.apache.spark.sql.catalyst.rules.RuleExecutor
2424
import org.apache.spark.sql.catalyst.dsl.expressions._
2525
import org.apache.spark.sql.catalyst.dsl.plans._
@@ -35,12 +35,11 @@ class ColumnPruningSuite extends PlanTest {
3535
test("Column pruning for Generate when Generate.join = false") {
3636
val input = LocalRelation('a.int, 'b.array(StringType))
3737

38-
val query = Generate(Explode('b), false, false, None, 's.string :: Nil, input).analyze
38+
val query = input.generate(Explode('b), join = false).analyze
39+
3940
val optimized = Optimize.execute(query)
4041

41-
val correctAnswer =
42-
Generate(Explode('b), false, false, None, 's.string :: Nil,
43-
Project('b.attr :: Nil, input)).analyze
42+
val correctAnswer = input.select('b).generate(Explode('b), join = false).analyze
4443

4544
comparePlans(optimized, correctAnswer)
4645
}
@@ -49,16 +48,19 @@ class ColumnPruningSuite extends PlanTest {
4948
val input = LocalRelation('a.int, 'b.int, 'c.array(StringType))
5049

5150
val query =
52-
Project(Seq('a, 's),
53-
Generate(Explode('c), true, false, None, 's.string :: Nil,
54-
input)).analyze
51+
input
52+
.generate(Explode('c), join = true, outputNames = "explode" :: Nil)
53+
.select('a, 'explode)
54+
.analyze
55+
5556
val optimized = Optimize.execute(query)
5657

5758
val correctAnswer =
58-
Project(Seq('a, 's),
59-
Generate(Explode('c), true, false, None, 's.string :: Nil,
60-
Project(Seq('a, 'c),
61-
input))).analyze
59+
input
60+
.select('a, 'c)
61+
.generate(Explode('c), join = true, outputNames = "explode" :: Nil)
62+
.select('a, 'explode)
63+
.analyze
6264

6365
comparePlans(optimized, correctAnswer)
6466
}
@@ -67,15 +69,18 @@ class ColumnPruningSuite extends PlanTest {
6769
val input = LocalRelation('b.array(StringType))
6870

6971
val query =
70-
Project(('s + 1).as("s+1") :: Nil,
71-
Generate(Explode('b), true, false, None, 's.string :: Nil,
72-
input)).analyze
72+
input
73+
.generate(Explode('b), join = true, outputNames = "explode" :: Nil)
74+
.select(('explode + 1).as("result"))
75+
.analyze
76+
7377
val optimized = Optimize.execute(query)
7478

7579
val correctAnswer =
76-
Project(('s + 1).as("s+1") :: Nil,
77-
Generate(Explode('b), false, false, None, 's.string :: Nil,
78-
input)).analyze
80+
input
81+
.generate(Explode('b), join = false, outputNames = "explode" :: Nil)
82+
.select(('explode + 1).as("result"))
83+
.analyze
7984

8085
comparePlans(optimized, correctAnswer)
8186
}

0 commit comments

Comments
 (0)