aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang-Chi Hsieh <viirya@appier.com>2015-07-18 12:11:37 -0700
committerReynold Xin <rxin@databricks.com>2015-07-18 12:11:37 -0700
commit225de8da2b20ba03b358e222411610e8567aa88d (patch)
tree216814da8d52cc4c9a01f07371673d70fb98fb39
parent86c50bf72c41d95107a55c16a6853dcda7f3e143 (diff)
downloadspark-225de8da2b20ba03b358e222411610e8567aa88d.tar.gz
spark-225de8da2b20ba03b358e222411610e8567aa88d.tar.bz2
spark-225de8da2b20ba03b358e222411610e8567aa88d.zip
[SPARK-9151][SQL] Implement code generation for Abs
JIRA: https://issues.apache.org/jira/browse/SPARK-9151 Add codegen support for `Abs`. Author: Liang-Chi Hsieh <viirya@appier.com> Closes #7498 from viirya/abs_codegen and squashes the following commits: 0c8410f [Liang-Chi Hsieh] Implement code generation for Abs.
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala7
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala2
2 files changed, 9 insertions, 0 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
index c5960eb390..e83650fc8c 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
@@ -73,6 +73,13 @@ case class Abs(child: Expression) extends UnaryExpression with ExpectsInputTypes
private lazy val numeric = TypeUtils.getNumeric(dataType)
+ override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = dataType match {
+ case dt: DecimalType =>
+ defineCodeGen(ctx, ev, c => s"$c.abs()")
+ case dt: NumericType =>
+ defineCodeGen(ctx, ev, c => s"(${ctx.javaType(dt)})(java.lang.Math.abs($c))")
+ }
+
protected override def nullSafeEval(input: Any): Any = numeric.abs(input)
}
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
index a85af9e04a..bc689810bc 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
@@ -278,6 +278,8 @@ final class Decimal extends Ordered[Decimal] with Serializable {
Decimal(-longVal, precision, scale)
}
}
+
+ def abs: Decimal = if (this.compare(Decimal(0)) < 0) this.unary_- else this
}
object Decimal {