Package

org.apache.spark.sql.catalyst.expressions

aggregate

Permalink

package aggregate

Visibility
  1. Public
  2. All

Type Members

  1. case class AggregateExpression(aggregateFunction: AggregateFunction, mode: AggregateMode, isDistinct: Boolean, resultId: ExprId) extends Expression with Unevaluable with Product with Serializable

    Permalink

    A container for an AggregateFunction with its AggregateMode and a field (isDistinct) indicating if DISTINCT keyword is specified for this function.

  2. abstract class AggregateFunction extends Expression

    Permalink

    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.

    Code which accepts AggregateFunction instances should be prepared to handle both types of aggregate functions.

  3. sealed trait AggregateMode extends AnyRef

    Permalink

    The mode of an AggregateFunction.

  4. case class ApproximatePercentile(child: Expression, percentageExpression: Expression, accuracyExpression: Expression, mutableAggBufferOffset: Int, inputAggBufferOffset: Int) extends TypedImperativeAggregate[PercentileDigest] with ImplicitCastInputTypes with Product with Serializable

    Permalink

    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 col at percentage 50% is the median of column col.

    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()
  5. case class Average(child: Expression) extends DeclarativeAggregate with ImplicitCastInputTypes with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  6. abstract class CentralMomentAgg extends DeclarativeAggregate with ImplicitCastInputTypes

    Permalink

    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.NaN when the column contains Double.NaN values

    References:

    • Xiangrui Meng. "Simpler Online Updates for Arbitrary-Order Central Moments." 2015. http://arxiv.org/abs/1510.04923
    See also

    Algorithms for calculating variance (Wikipedia)

  7. abstract class Collect[T <: Growable[Any] with Iterable[Any]] extends TypedImperativeAggregate[T]

    Permalink

    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.

  8. case class CollectList(child: Expression, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends Collect[ArrayBuffer[Any]] with Product with Serializable

    Permalink

    Collect a list of elements.

    Collect a list of elements.

    Annotations
    @ExpressionDescription()
  9. case class CollectSet(child: Expression, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends Collect[HashSet[Any]] with Product with Serializable

    Permalink

    Collect a set of unique elements.

    Collect a set of unique elements.

    Annotations
    @ExpressionDescription()
  10. case class Corr(x: Expression, y: Expression) extends DeclarativeAggregate with ImplicitCastInputTypes with Product with Serializable

    Permalink

    Compute Pearson correlation between two expressions.

    Compute 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

    Annotations
    @ExpressionDescription()
  11. case class Count(children: Seq[Expression]) extends DeclarativeAggregate with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  12. case class CountMinSketchAgg(child: Expression, epsExpression: Expression, confidenceExpression: Expression, seedExpression: Expression, mutableAggBufferOffset: Int, inputAggBufferOffset: Int) extends TypedImperativeAggregate[CountMinSketch] with ExpectsInputTypes with Product with Serializable

    Permalink

    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 CountMinSketch before 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()
  13. case class CovPopulation(left: Expression, right: Expression) extends Covariance with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  14. case class CovSample(left: Expression, right: Expression) extends Covariance with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  15. abstract class Covariance extends DeclarativeAggregate with ImplicitCastInputTypes

    Permalink

    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.

  16. abstract class DeclarativeAggregate extends AggregateFunction with Serializable with Unevaluable

    Permalink

    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 defining updateExpressions, mergeExpressions, and evaluateExpressions.

    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.

  17. case class First(child: Expression, ignoreNullsExpr: Expression) extends DeclarativeAggregate with ExpectsInputTypes with Product with Serializable

    Permalink

    Returns the first value of child for a group of rows.

    Returns the first value of child for a group of rows. If the first value of child is null, it returns null (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()
  18. case class HyperLogLogPlusPlus(child: Expression, relativeSD: Double = 0.05, mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends ImperativeAggregate with Product with Serializable

    Permalink

    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 estimation error allowed.

    Annotations
    @ExpressionDescription()
  19. abstract class ImperativeAggregate extends AggregateFunction with CodegenFallback

    Permalink

    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 mutableAggBufferOffset then 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, use inputAggBufferOffset when accessing the input buffer).

    Correct ImperativeAggregate evaluation depends on the correctness of mutableAggBufferOffset and inputAggBufferOffset, but not on the correctness of the attribute ids in aggBufferAttributes and inputAggBufferAttributes.

  20. case class Kurtosis(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  21. case class Last(child: Expression, ignoreNullsExpr: Expression) extends DeclarativeAggregate with ExpectsInputTypes with Product with Serializable

    Permalink

    Returns the last value of child for a group of rows.

    Returns the last value of child for a group of rows. If the last value of child is null, it returns null (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()
  22. case class Max(child: Expression) extends DeclarativeAggregate with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  23. case class Min(child: Expression) extends DeclarativeAggregate with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  24. 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

    Permalink

    The Percentile aggregate function returns the exact percentile(s) of numeric column expr at the given percentage(s) with value range in [0.0, 1.0].

    The Percentile aggregate function returns the exact percentile(s) of numeric column expr at 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()
  25. case class PivotFirst(pivotColumn: Expression, valueColumn: Expression, pivotColumnValues: Seq[Any], mutableAggBufferOffset: Int = 0, inputAggBufferOffset: Int = 0) extends ImperativeAggregate with Product with Serializable

    Permalink

    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.

  26. case class Skewness(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  27. case class StddevPop(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  28. case class StddevSamp(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  29. case class Sum(child: Expression) extends DeclarativeAggregate with ImplicitCastInputTypes with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  30. abstract class TypedImperativeAggregate[T] extends ImperativeAggregate

    Permalink

    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.

    1. The framework calls initialize(buffer: MutableRow) to set up the empty aggregate buffer. 2. In initialize, we call createAggregationBuffer(): T to get the initial buffer object, and set it to the global buffer row.

    Stage 2: process input rows.

    If the aggregate mode is Partial or Complete:

    1. The framework calls update(buffer: MutableRow, input: InternalRow) to process the input row. 2. In update, we get the buffer object from the global buffer row and call update(buffer: T, input: InternalRow): Unit.

    If the aggregate mode is PartialMerge or Final:

    1. The framework call merge(buffer: MutableRow, inputBuffer: InternalRow) to process the input row, which are serialized buffer objects shuffled from other nodes. 2. In merge, 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 call merge(buffer: T, input: T): Unit to merge these 2 buffer objects.

    Stage 3: output results.

    If the aggregate mode is Partial or PartialMerge:

    1. The framework calls serializeAggregateBufferInPlace to replace the buffer object in the global buffer row with binary data. 2. In serializeAggregateBufferInPlace, we get the buffer object from the global buffer row and call serialize(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 Final or Complete:

    1. The framework calls eval(buffer: InternalRow) to calculate the final result. 2. In eval, we get the buffer object from the global buffer row and call eval(buffer: T): Any to 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 call eval(buffer: InternalRow), so there is no need for window operator to call serializeAggregateBufferInPlace.

    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.

  31. case class VariancePop(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()
  32. case class VarianceSamp(child: Expression) extends CentralMomentAgg with Product with Serializable

    Permalink
    Annotations
    @ExpressionDescription()

Value Members

  1. object AggregateExpression extends Serializable

    Permalink
  2. object ApproximatePercentile extends Serializable

    Permalink
  3. object Complete extends AggregateMode with Product with Serializable

    Permalink

    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.

  4. object Count extends Serializable

    Permalink
  5. object Final extends AggregateMode with Product with Serializable

    Permalink

    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.

  6. object HyperLogLogPlusPlus extends Serializable

    Permalink

    Constants used in the implementation of the HyperLogLogPlusPlus aggregate function.

    Constants used in the implementation of the HyperLogLogPlusPlus aggregate function.

    See the Appendix to HyperLogLog in Practice: Algorithmic Engineering of a State of the Art Cardinality (https://docs.google.com/document/d/1gyjfMHy43U9OWBXxfaeG-3MjGzejW1dlpyMwEYAAWEI/view?fullscreen) for more information.

  7. object NoOp extends Expression with Unevaluable with Product with Serializable

    Permalink

    A place holder expressions used in code-gen, it does not change the corresponding value in the row.

  8. object Partial extends AggregateMode with Product with Serializable

    Permalink

    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.

  9. object PartialMerge extends AggregateMode with Product with Serializable

    Permalink

    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.

  10. object PivotFirst extends Serializable

    Permalink

Ungrouped