aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorMichael Armbrust <michael@databricks.com>2014-08-17 19:00:38 -0700
committerMichael Armbrust <michael@databricks.com>2014-08-17 19:00:55 -0700
commit4f776dfab726f54c948a83a7157b958903c15ecf (patch)
tree8062c1e789910e30482e3e9c1a882fca6b94724e /sql/catalyst
parentc6a0091ea401e0bec58d7607eb42be89cc090868 (diff)
downloadspark-4f776dfab726f54c948a83a7157b958903c15ecf.tar.gz
spark-4f776dfab726f54c948a83a7157b958903c15ecf.tar.bz2
spark-4f776dfab726f54c948a83a7157b958903c15ecf.zip
[SQL] Improve debug logging and toStrings.
Author: Michael Armbrust <michael@databricks.com> Closes #2004 from marmbrus/codgenDebugging and squashes the following commits: b7a7e41 [Michael Armbrust] Improve debug logging and toStrings. (cherry picked from commit bfa09b01d7eddc572cd22ca2e418a735b4ccc826) Signed-off-by: Michael Armbrust <michael@databricks.com>
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala21
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/nullFunctions.scala2
2 files changed, 21 insertions, 2 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
index 5b398695bf..de2d67ce82 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
@@ -78,7 +78,12 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
.build(
new CacheLoader[InType, OutType]() {
override def load(in: InType): OutType = globalLock.synchronized {
- create(in)
+ val startTime = System.nanoTime()
+ val result = create(in)
+ val endTime = System.nanoTime()
+ def timeMs = (endTime - startTime).toDouble / 1000000
+ logInfo(s"Code generated expression $in in $timeMs ms")
+ result
}
})
@@ -413,7 +418,19 @@ abstract class CodeGenerator[InType <: AnyRef, OutType <: AnyRef] extends Loggin
""".children
}
- EvaluatedExpression(code, nullTerm, primitiveTerm, objectTerm)
+ // Only inject debugging code if debugging is turned on.
+ val debugCode =
+ if (log.isDebugEnabled) {
+ val localLogger = log
+ val localLoggerTree = reify { localLogger }
+ q"""
+ $localLoggerTree.debug(${e.toString} + ": " + (if($nullTerm) "null" else $primitiveTerm))
+ """ :: Nil
+ } else {
+ Nil
+ }
+
+ EvaluatedExpression(code ++ debugCode, nullTerm, primitiveTerm, objectTerm)
}
protected def getColumn(inputRow: TermName, dataType: DataType, ordinal: Int) = {
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/nullFunctions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/nullFunctions.scala
index ce6d99c911..e88c5d4fa1 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/nullFunctions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/nullFunctions.scala
@@ -60,6 +60,8 @@ case class IsNull(child: Expression) extends Predicate with trees.UnaryNode[Expr
override def eval(input: Row): Any = {
child.eval(input) == null
}
+
+ override def toString = s"IS NULL $child"
}
case class IsNotNull(child: Expression) extends Predicate with trees.UnaryNode[Expression] {