package aggregate
- Alphabetic
- Public
- All
Type Members
-
case class
AggregateExpression(aggregateFunction: AggregateFunction, mode: AggregateMode, isDistinct: Boolean, filter: Option[Expression], resultId: ExprId) extends Expression with Unevaluable with Product with Serializable
A container for an AggregateFunction with its AggregateMode and a field (
isDistinct) indicating if DISTINCT keyword is specified for this function and a field (filter) indicating if filter clause is specified for this function. -
abstract
class
AggregateFunction extends Expression
AggregateFunction is the superclass of two aggregation function interfaces:
AggregateFunction is the superclass of two aggregation function interfaces:
- ImperativeAggregate is for aggregation functions that are specified in terms of initialize(), update(), and merge() functions that operate on Row-based aggregation buffers.
- DeclarativeAggregate is for aggregation functions that are specified using Catalyst expressions.
In both interfaces, aggregates must define the schema (aggBufferSchema) and attributes (aggBufferAttributes) of an aggregation buffer which is used to hold partial aggregate results. At runtime, multiple aggregate functions are evaluated by the same operator using a combined aggregation buffer which concatenates the aggregation buffers of the individual aggregate functions. Please note that aggregate functions should be stateless.
Code which accepts AggregateFunction instances should be prepared to handle both types of aggregate functions.
-
sealed
trait
AggregateMode extends AnyRef
The mode of an AggregateFunction.
-
case class
ApproxCountDistinctForIntervals(child: Expression, endpointsExpression: Expression, relativeSD: Double = 0.05, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends TypedImperativeAggregate[Array[Long]] with ExpectsInputTypes with Product with Serializable
This function counts the approximate number of distinct values (ndv) in intervals constructed from endpoints specified in
endpointsExpression.This function counts the approximate number of distinct values (ndv) in intervals constructed from endpoints specified in
endpointsExpression. The endpoints should be sorted into ascending order. E.g., given an array of endpoints (endpoint_1, endpoint_2, ... endpoint_N), returns the approximate ndv's for intervals [endpoint_1, endpoint_2], (endpoint_2, endpoint_3], ... (endpoint_N-1, endpoint_N]. To count ndv's in these intervals, apply the HyperLogLogPlusPlus algorithm in each of them.- child
to estimate the ndv's of.
- endpointsExpression
An array expression to construct the intervals. It must be foldable, and its elements should be sorted into ascending order. Duplicate endpoints are allowed, e.g. (1, 5, 5, 10), and ndv for interval (5, 5] would be 1.
- relativeSD
The maximum relative standard deviation allowed in the HyperLogLogPlusPlus algorithm.
-
case class
ApproximatePercentile(child: Expression, percentageExpression: Expression, accuracyExpression: Expression, mutableAggBufferOffset: Int, inputAggBufferOffset: Int) extends TypedImperativeAggregate[PercentileDigest] with ImplicitCastInputTypes with Product with Serializable
The ApproximatePercentile function returns the approximate percentile(s) of a column at the given percentage(s).
The ApproximatePercentile function returns the approximate percentile(s) of a column at the given percentage(s). A percentile is a watermark value below which a given percentage of the column values fall. For example, the percentile of column
colat percentage 50% is the median of columncol.This function supports partial aggregation.
- child
child expression that can produce column value with
child.eval(inputRow)- percentageExpression
Expression that represents a single percentage value or an array of percentage values. Each percentage value must be between 0.0 and 1.0.
- accuracyExpression
Integer literal expression of approximation accuracy. Higher value yields better accuracy, the default value is DEFAULT_PERCENTILE_ACCURACY.
- Annotations
- @ExpressionDescription()
-
case class
Average(child: Expression) extends DeclarativeAggregate with ImplicitCastInputTypes with Product with Serializable
- Annotations
- @ExpressionDescription()
- abstract class BitAggregate extends DeclarativeAggregate with ExpectsInputTypes
-
case class
BitAndAgg(child: Expression) extends BitAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
BitOrAgg(child: Expression) extends BitAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
BitXorAgg(child: Expression) extends BitAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
BoolAnd(arg: Expression) extends UnevaluableBooleanAggBase with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
BoolOr(arg: Expression) extends UnevaluableBooleanAggBase with Product with Serializable
- Annotations
- @ExpressionDescription()
-
abstract
class
CentralMomentAgg extends DeclarativeAggregate with ImplicitCastInputTypes
A central moment is the expected value of a specified power of the deviation of a random variable from the mean.
A central moment is the expected value of a specified power of the deviation of a random variable from the mean. Central moments are often used to characterize the properties of about the shape of a distribution.
This class implements online, one-pass algorithms for computing the central moments of a set of points.
Behavior:
- null values are ignored
- returns
Double.NaNwhen the column containsDouble.NaNvalues
References:
- Xiangrui Meng. "Simpler Online Updates for Arbitrary-Order Central Moments." 2015. http://arxiv.org/abs/1510.04923
-
abstract
class
Collect[T <: Growable[Any] with Iterable[Any]] extends TypedImperativeAggregate[T]
A base class for collect_list and collect_set aggregate functions.
A base class for collect_list and collect_set aggregate functions.
We have to store all the collected elements in memory, and so notice that too many elements can cause GC paused and eventually OutOfMemory Errors.
-
case class
CollectList(child: Expression, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends Collect[ArrayBuffer[Any]] with Product with Serializable
Collect a list of elements.
Collect a list of elements.
- Annotations
- @ExpressionDescription()
-
case class
CollectSet(child: Expression, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends Collect[HashSet[Any]] with Product with Serializable
Collect a set of unique elements.
Collect a set of unique elements.
- Annotations
- @ExpressionDescription()
-
case class
Corr(x: Expression, y: Expression) extends PearsonCorrelation with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
Count(children: Seq[Expression]) extends DeclarativeAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
CountIf(predicate: Expression) extends DeclarativeAggregate with UnevaluableAggregate with ImplicitCastInputTypes with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
CountMinSketchAgg(child: Expression, epsExpression: Expression, confidenceExpression: Expression, seedExpression: Expression, mutableAggBufferOffset: Int, inputAggBufferOffset: Int) extends TypedImperativeAggregate[CountMinSketch] with ExpectsInputTypes with Product with Serializable
This function returns a count-min sketch of a column with the given esp, confidence and seed.
This function returns a count-min sketch of a column with the given esp, confidence and seed. A count-min sketch is a probabilistic data structure used for summarizing streams of data in sub-linear space, which is useful for equality predicates and join size estimation. The result returned by the function is an array of bytes, which should be deserialized to a
CountMinSketchbefore usage.- child
child expression that can produce column value with
child.eval(inputRow)- epsExpression
relative error, must be positive
- confidenceExpression
confidence, must be positive and less than 1.0
- seedExpression
random seed
- Annotations
- @ExpressionDescription()
-
case class
CovPopulation(left: Expression, right: Expression) extends Covariance with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
CovSample(left: Expression, right: Expression) extends Covariance with Product with Serializable
- Annotations
- @ExpressionDescription()
-
abstract
class
Covariance extends DeclarativeAggregate with ImplicitCastInputTypes
Compute the covariance between two expressions.
Compute the covariance between two expressions. When applied on empty data (i.e., count is zero), it returns NULL.
-
abstract
class
DeclarativeAggregate extends AggregateFunction with Serializable with Unevaluable
API for aggregation functions that are expressed in terms of Catalyst expressions.
API for aggregation functions that are expressed in terms of Catalyst expressions.
When implementing a new expression-based aggregate function, start by implementing
bufferAttributes, defining attributes for the fields of the mutable aggregation buffer. You can then use these attributes when definingupdateExpressions,mergeExpressions, andevaluateExpressions.Please note that children of an aggregate function can be unresolved (it will happen when we create this function in DataFrame API). So, if there is any fields in the implemented class that need to access fields of its children, please make those fields
lazy vals. -
case class
First(child: Expression, ignoreNulls: Boolean) extends DeclarativeAggregate with ExpectsInputTypes with Product with Serializable
Returns the first value of
childfor a group of rows.Returns the first value of
childfor a group of rows. If the first value ofchildisnull, it returnsnull(respecting nulls). Even if First is used on an already sorted column, if we do partial aggregation and final aggregation (when mergeExpression is used) its result will not be deterministic (unless the input table is sorted and has a single partition, and we use a single reducer to do the aggregation.).- Annotations
- @ExpressionDescription()
-
case class
HyperLogLogPlusPlus(child: Expression, relativeSD: Double = 0.05, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends ImperativeAggregate with Product with Serializable
HyperLogLog++ (HLL++) is a state of the art cardinality estimation algorithm.
HyperLogLog++ (HLL++) is a state of the art cardinality estimation algorithm. This class implements the dense version of the HLL++ algorithm as an Aggregate Function.
This implementation has been based on the following papers: HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf
HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/pubs/archive/40671.pdf
Appendix to HyperLogLog in Practice: Algorithmic Engineering of a State of the Art Cardinality Estimation Algorithm https://docs.google.com/document/d/1gyjfMHy43U9OWBXxfaeG-3MjGzejW1dlpyMwEYAAWEI/view?fullscreen#
- child
to estimate the cardinality of.
- relativeSD
the maximum relative standard deviation allowed.
- Annotations
- @ExpressionDescription()
-
abstract
class
ImperativeAggregate extends AggregateFunction with CodegenFallback
API for aggregation functions that are expressed in terms of imperative initialize(), update(), and merge() functions which operate on Row-based aggregation buffers.
API for aggregation functions that are expressed in terms of imperative initialize(), update(), and merge() functions which operate on Row-based aggregation buffers.
Within these functions, code should access fields of the mutable aggregation buffer by adding the bufferSchema-relative field number to
mutableAggBufferOffsetthen using this new field number to access the buffer Row. This is necessary because this aggregation function's buffer is embedded inside of a larger shared aggregation buffer when an aggregation operator evaluates multiple aggregate functions at the same time.We need to perform similar field number arithmetic when merging multiple intermediate aggregate buffers together in
merge()(in this case, useinputAggBufferOffsetwhen accessing the input buffer).Correct ImperativeAggregate evaluation depends on the correctness of
mutableAggBufferOffsetandinputAggBufferOffset, but not on the correctness of the attribute ids inaggBufferAttributesandinputAggBufferAttributes. -
case class
Kurtosis(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
Last(child: Expression, ignoreNulls: Boolean) extends DeclarativeAggregate with ExpectsInputTypes with Product with Serializable
Returns the last value of
childfor a group of rows.Returns the last value of
childfor a group of rows. If the last value ofchildisnull, it returnsnull(respecting nulls). Even if Last is used on an already sorted column, if we do partial aggregation and final aggregation (when mergeExpression is used) its result will not be deterministic (unless the input table is sorted and has a single partition, and we use a single reducer to do the aggregation.).- Annotations
- @ExpressionDescription()
-
case class
Max(child: Expression) extends DeclarativeAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
MaxBy(valueExpr: Expression, orderingExpr: Expression) extends MaxMinBy with Product with Serializable
- Annotations
- @ExpressionDescription()
-
abstract
class
MaxMinBy extends DeclarativeAggregate
The shared abstract superclass for
MaxByandMinBySQL aggregate functions. -
case class
Min(child: Expression) extends DeclarativeAggregate with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
MinBy(valueExpr: Expression, orderingExpr: Expression) extends MaxMinBy with Product with Serializable
- Annotations
- @ExpressionDescription()
-
abstract
class
PearsonCorrelation extends DeclarativeAggregate with ImplicitCastInputTypes
Base class for computing Pearson correlation between two expressions.
Base class for computing Pearson correlation between two expressions. When applied on empty data (i.e., count is zero), it returns NULL.
Definition of Pearson correlation can be found at http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient
-
case class
Percentile(child: Expression, percentageExpression: Expression, frequencyExpression: Expression, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends TypedImperativeAggregate[OpenHashMap[AnyRef, Long]] with ImplicitCastInputTypes with Product with Serializable
The Percentile aggregate function returns the exact percentile(s) of numeric column
exprat the given percentage(s) with value range in [0.0, 1.0].The Percentile aggregate function returns the exact percentile(s) of numeric column
exprat the given percentage(s) with value range in [0.0, 1.0].Because the number of elements and their partial order cannot be determined in advance. Therefore we have to store all the elements in memory, and so notice that too many elements can cause GC paused and eventually OutOfMemory Errors.
- child
child expression that produce numeric column value with
child.eval(inputRow)- percentageExpression
Expression that represents a single percentage value or an array of percentage values. Each percentage value must be in the range [0.0, 1.0].
- Annotations
- @ExpressionDescription()
-
case class
PivotFirst(pivotColumn: Expression, valueColumn: Expression, pivotColumnValues: Seq[Any], mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends ImperativeAggregate with Product with Serializable
PivotFirst is an aggregate function used in the second phase of a two phase pivot to do the required rearrangement of values into pivoted form.
PivotFirst is an aggregate function used in the second phase of a two phase pivot to do the required rearrangement of values into pivoted form.
For example on an input of A | B --+-- x | 1 y | 2 z | 3
with pivotColumn=A, valueColumn=B, and pivotColumnValues=[z,y] the output is [3,2].
- pivotColumn
column that determines which output position to put valueColumn in.
- valueColumn
the column that is being rearranged.
- pivotColumnValues
the list of pivotColumn values in the order of desired output. Values not listed here will be ignored.
-
case class
Skewness(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
StddevPop(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
StddevSamp(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
Sum(child: Expression) extends DeclarativeAggregate with ImplicitCastInputTypes with Product with Serializable
- Annotations
- @ExpressionDescription()
-
abstract
class
TypedImperativeAggregate[T] extends ImperativeAggregate
Aggregation function which allows **arbitrary** user-defined java object to be used as internal aggregation buffer.
Aggregation function which allows **arbitrary** user-defined java object to be used as internal aggregation buffer.
aggregation buffer for normal aggregation function `avg` aggregate buffer for `sum` | | v v +--------------+---------------+-----------------------------------+-------------+ | sum1 (Long) | count1 (Long) | generic user-defined java objects | sum2 (Long) | +--------------+---------------+-----------------------------------+-------------+ ^ | aggregation buffer object for `TypedImperativeAggregate` aggregation function
General work flow:
Stage 1: initialize aggregate buffer object.
- The framework calls
initialize(buffer: MutableRow)to set up the empty aggregate buffer. 2. Ininitialize, we callcreateAggregationBuffer(): Tto get the initial buffer object, and set it to the global buffer row.
Stage 2: process input rows.
If the aggregate mode is
PartialorComplete:- The framework calls
update(buffer: MutableRow, input: InternalRow)to process the input row. 2. Inupdate, we get the buffer object from the global buffer row and callupdate(buffer: T, input: InternalRow): Unit.
If the aggregate mode is
PartialMergeorFinal:- The framework call
merge(buffer: MutableRow, inputBuffer: InternalRow)to process the input row, which are serialized buffer objects shuffled from other nodes. 2. Inmerge, we get the buffer object from the global buffer row, and get the binary data from input row and deserialize it to buffer object, then we callmerge(buffer: T, input: T): Unitto merge these 2 buffer objects.
Stage 3: output results.
If the aggregate mode is
PartialorPartialMerge:- The framework calls
serializeAggregateBufferInPlaceto replace the buffer object in the global buffer row with binary data. 2. InserializeAggregateBufferInPlace, we get the buffer object from the global buffer row and callserialize(buffer: T): Array[Byte]to serialize the buffer object to binary. 3. The framework outputs buffer attributes and shuffle them to other nodes.
If the aggregate mode is
FinalorComplete:- The framework calls
eval(buffer: InternalRow)to calculate the final result. 2. Ineval, we get the buffer object from the global buffer row and calleval(buffer: T): Anyto get the final result. 3. The framework outputs these final results.
Window function work flow: The framework calls
update(buffer: MutableRow, input: InternalRow)several times and then calleval(buffer: InternalRow), so there is no need for window operator to callserializeAggregateBufferInPlace.NOTE: SQL with TypedImperativeAggregate functions is planned in sort based aggregation, instead of hash based aggregation, as TypedImperativeAggregate use BinaryType as aggregation buffer's storage format, which is not supported by hash based aggregation. Hash based aggregation only support aggregation buffer of mutable types (like LongType, IntType that have fixed length and can be mutated in place in UnsafeRow). NOTE: The newly added ObjectHashAggregateExec supports TypedImperativeAggregate functions in hash based aggregation under some constraints.
- The framework calls
- abstract class UnevaluableBooleanAggBase extends DeclarativeAggregate with UnevaluableAggregate with ImplicitCastInputTypes
-
case class
VariancePop(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
-
case class
VarianceSamp(child: Expression) extends CentralMomentAgg with Product with Serializable
- Annotations
- @ExpressionDescription()
Value Members
- object AggregateExpression extends Serializable
- object ApproximatePercentile extends Serializable
-
object
Complete extends AggregateMode with Product with Serializable
An AggregateFunction with Complete mode is used to evaluate this function directly from original input rows without any partial aggregation.
An AggregateFunction with Complete mode is used to evaluate this function directly from original input rows without any partial aggregation. This function updates the given aggregation buffer with the original input of this function. When it has processed all input rows, the final result of this function is returned.
- object Count extends Serializable
-
object
Final extends AggregateMode with Product with Serializable
An AggregateFunction with Final mode is used to merge aggregation buffers containing intermediate results for this function and then generate final result.
An AggregateFunction with Final mode is used to merge aggregation buffers containing intermediate results for this function and then generate final result. This function updates the given aggregation buffer by merging multiple aggregation buffers. When it has processed all input rows, the final result of this function is returned.
- object FirstLast
- object HyperLogLogPlusPlus extends Serializable
-
object
NoOp extends Expression with Unevaluable with Product with Serializable
A place holder expressions used in code-gen, it does not change the corresponding value in the row.
-
object
Partial extends AggregateMode with Product with Serializable
An AggregateFunction with Partial mode is used for partial aggregation.
An AggregateFunction with Partial mode is used for partial aggregation. This function updates the given aggregation buffer with the original input of this function. When it has processed all input rows, the aggregation buffer is returned.
-
object
PartialMerge extends AggregateMode with Product with Serializable
An AggregateFunction with PartialMerge mode is used to merge aggregation buffers containing intermediate results for this function.
An AggregateFunction with PartialMerge mode is used to merge aggregation buffers containing intermediate results for this function. This function updates the given aggregation buffer by merging multiple aggregation buffers. When it has processed all input rows, the aggregation buffer is returned.
- object PivotFirst extends Serializable