From 0e40a1b5562a58d8e0b77950282be27d2699a539 Mon Sep 17 00:00:00 2001 From: Yanbo Liang Date: Sat, 21 Feb 2015 02:31:01 +0800 Subject: [PATCH 1/2] make DataFrame.explain leverage queryExecution.logical --- sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala index 810f7c77477bb..21169624a5422 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala @@ -123,7 +123,7 @@ class DataFrame protected[sql]( }) } - @transient protected[sql] val logicalPlan: LogicalPlan = queryExecution.logical match { + @transient protected[sql] lazy val logicalPlan: LogicalPlan = queryExecution.logical match { // For various commands (like DDL) and queries with side effects, we force query optimization to // happen right away to let these side effects take place eagerly. case _: Command | @@ -264,7 +264,7 @@ class DataFrame protected[sql]( */ def explain(extended: Boolean): Unit = { ExplainCommand( - logicalPlan, + queryExecution.logical, extended = extended).queryExecution.executedPlan.executeCollect().map { r => println(r.getString(0)) } From fa6db63420189e531e4f403b880705822f39e9a7 Mon Sep 17 00:00:00 2001 From: Yanbo Liang Date: Sun, 22 Feb 2015 21:54:17 +0800 Subject: [PATCH 2/2] logicalPlan is not lazy --- sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala index 21169624a5422..c86204bdb281f 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala @@ -123,7 +123,7 @@ class DataFrame protected[sql]( }) } - @transient protected[sql] lazy val logicalPlan: LogicalPlan = queryExecution.logical match { + @transient protected[sql] val logicalPlan: LogicalPlan = queryExecution.logical match { // For various commands (like DDL) and queries with side effects, we force query optimization to // happen right away to let these side effects take place eagerly. case _: Command |