Skip to content
Snippets Groups Projects
Commit 9df86835 authored by Takuya UESHIN's avatar Takuya UESHIN Committed by Reynold Xin
Browse files

[SPARK-1938] [SQL] ApproxCountDistinctMergeFunction should return Int value.

`ApproxCountDistinctMergeFunction` should return `Int` value because the `dataType` of `ApproxCountDistinct` is `IntegerType`.

Author: Takuya UESHIN <ueshin@happy-camper.st>

Closes #893 from ueshin/issues/SPARK-1938 and squashes the following commits:

3970e88 [Takuya UESHIN] Remove a superfluous line.
5ad7ec1 [Takuya UESHIN] Make dataType for each of CountDistinct, ApproxCountDistinctMerge and ApproxCountDistinct LongType.
cbe7c71 [Takuya UESHIN] Revert a change.
fc3ac0f [Takuya UESHIN] Fix evaluated value type of ApproxCountDistinctMergeFunction to Int.
parent 06825674
No related branches found
No related tags found
No related merge requests found
...@@ -82,7 +82,6 @@ abstract class AggregateFunction ...@@ -82,7 +82,6 @@ abstract class AggregateFunction
override def dataType = base.dataType override def dataType = base.dataType
def update(input: Row): Unit def update(input: Row): Unit
override def eval(input: Row): Any
// Do we really need this? // Do we really need this?
override def newInstance() = makeCopy(productIterator.map { case a: AnyRef => a }.toArray) override def newInstance() = makeCopy(productIterator.map { case a: AnyRef => a }.toArray)
...@@ -166,7 +165,7 @@ case class CountDistinct(expressions: Seq[Expression]) extends AggregateExpressi ...@@ -166,7 +165,7 @@ case class CountDistinct(expressions: Seq[Expression]) extends AggregateExpressi
override def children = expressions override def children = expressions
override def references = expressions.flatMap(_.references).toSet override def references = expressions.flatMap(_.references).toSet
override def nullable = false override def nullable = false
override def dataType = IntegerType override def dataType = LongType
override def toString = s"COUNT(DISTINCT ${expressions.mkString(",")})" override def toString = s"COUNT(DISTINCT ${expressions.mkString(",")})"
override def newInstance() = new CountDistinctFunction(expressions, this) override def newInstance() = new CountDistinctFunction(expressions, this)
} }
...@@ -184,7 +183,7 @@ case class ApproxCountDistinctMerge(child: Expression, relativeSD: Double) ...@@ -184,7 +183,7 @@ case class ApproxCountDistinctMerge(child: Expression, relativeSD: Double)
extends AggregateExpression with trees.UnaryNode[Expression] { extends AggregateExpression with trees.UnaryNode[Expression] {
override def references = child.references override def references = child.references
override def nullable = false override def nullable = false
override def dataType = IntegerType override def dataType = LongType
override def toString = s"APPROXIMATE COUNT(DISTINCT $child)" override def toString = s"APPROXIMATE COUNT(DISTINCT $child)"
override def newInstance() = new ApproxCountDistinctMergeFunction(child, this, relativeSD) override def newInstance() = new ApproxCountDistinctMergeFunction(child, this, relativeSD)
} }
...@@ -193,7 +192,7 @@ case class ApproxCountDistinct(child: Expression, relativeSD: Double = 0.05) ...@@ -193,7 +192,7 @@ case class ApproxCountDistinct(child: Expression, relativeSD: Double = 0.05)
extends PartialAggregate with trees.UnaryNode[Expression] { extends PartialAggregate with trees.UnaryNode[Expression] {
override def references = child.references override def references = child.references
override def nullable = false override def nullable = false
override def dataType = IntegerType override def dataType = LongType
override def toString = s"APPROXIMATE COUNT(DISTINCT $child)" override def toString = s"APPROXIMATE COUNT(DISTINCT $child)"
override def asPartial: SplitEvaluation = { override def asPartial: SplitEvaluation = {
...@@ -394,7 +393,7 @@ case class CountDistinctFunction(expr: Seq[Expression], base: AggregateExpressio ...@@ -394,7 +393,7 @@ case class CountDistinctFunction(expr: Seq[Expression], base: AggregateExpressio
} }
} }
override def eval(input: Row): Any = seen.size override def eval(input: Row): Any = seen.size.toLong
} }
case class FirstFunction(expr: Expression, base: AggregateExpression) extends AggregateFunction { case class FirstFunction(expr: Expression, base: AggregateExpression) extends AggregateFunction {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment