com.google.cloud.dataflow.sdk.transforms

## Class ApproximateUnique.ApproximateUniqueCombineFn<T>

- java.lang.Object
- - com.google.cloud.dataflow.sdk.transforms.Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>
  - - com.google.cloud.dataflow.sdk.transforms.ApproximateUnique.ApproximateUniqueCombineFn<T>

Type Parameters:
  `T` - the type of the values being combined

All Implemented Interfaces:
  CombineFnBase.GlobalCombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>, HasDisplayData, Serializable

Enclosing class:
  ApproximateUnique

    public static class ApproximateUnique.ApproximateUniqueCombineFn<T>
    extends Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>

`CombineFn` that computes an estimate of the number of distinct values that were combined.

Hashes input elements, computes the top `sampleSize` hash values, and uses those to extrapolate the size of the entire set of hash values by assuming the rest of the hash values are as densely distributed as the top `sampleSize`.

Used to implement `ApproximatUnique.globally(...)` and `ApproximatUnique.perKey(...)`.

See Also:
  Serialized Form

### Nested Class Summary

Nested Classes
`static class` `ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique` A heap utility class to efficiently track the largest added elements.

### Constructor Summary

Constructors
Constructor and Description
`ApproximateUniqueCombineFn(long sampleSize, Coder<T> coder)`

### Method Summary

All Methods Instance Methods Concrete Methods
`ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique` `addInput(ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique heap, T input)` Adds the given input value to the given accumulator, returning the new accumulator value.
`ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique` `createAccumulator()` Returns a new, mutable accumulator value, representing the accumulation of zero input values.
`Long` `extractOutput(ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique heap)` Returns the output value that is the result of combining all the input values represented by the given accumulator.
`TypeVariable<?>` `getAccumTVariable()` Returns the `TypeVariable` of `AccumT`.
`Coder<ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique>` `getAccumulatorCoder(CoderRegistry registry, Coder<T> inputCoder)` Returns the `Coder` to use for accumulator `AccumT` values, or null if it is not able to be inferred.
`Coder<OutputT>` `getDefaultOutputCoder(CoderRegistry registry, Coder<InputT> inputCoder)` Returns the `Coder` to use by default for output `OutputT` values, or null if it is not able to be inferred.
`String` `getIncompatibleGlobalWindowErrorMessage()` Returns the error message for not supported default values in Combine.globally().
`TypeVariable<?>` `getInputTVariable()` Returns the `TypeVariable` of `InputT`.
`TypeVariable<?>` `getOutputTVariable()` Returns the `TypeVariable` of `OutputT`.
`ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique` `mergeAccumulators(Iterable<ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique> heaps)` Returns an accumulator representing the accumulation of all the input values accumulated in the merging accumulators.
`void` `populateDisplayData(DisplayData.Builder builder)` Register display data for the given transform or component.

### Methods inherited from class com.google.cloud.dataflow.sdk.transforms.Combine.CombineFn

`apply, asKeyedFn, compact, defaultValue, getOutputType`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### ApproximateUniqueCombineFn

    public ApproximateUniqueCombineFn(long sampleSize,
                                      Coder<T> coder)

### Method Detail

#### createAccumulator

    public ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique createAccumulator()

Description copied from class: `Combine.CombineFn`
Returns a new, mutable accumulator value, representing the accumulation of zero input values.

Specified by:
  `createAccumulator` in class `Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>`

#### addInput

    public ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique addInput(ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique heap,
                                                                               T input)

Description copied from class: `Combine.CombineFn`
Adds the given input value to the given accumulator, returning the new accumulator value.

For efficiency, the input accumulator may be modified and returned.

Specified by:
  `addInput` in class `Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>`

#### mergeAccumulators

    public ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique mergeAccumulators(Iterable<ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique> heaps)

Description copied from class: `Combine.CombineFn`
Returns an accumulator representing the accumulation of all the input values accumulated in the merging accumulators.

May modify any of the argument accumulators. May return a fresh accumulator, or may return one of the (modified) argument accumulators.

Specified by:
  `mergeAccumulators` in class `Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>`

#### extractOutput

    public Long extractOutput(ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique heap)

Description copied from class: `Combine.CombineFn`
Returns the output value that is the result of combining all the input values represented by the given accumulator.

Specified by:
  `extractOutput` in class `Combine.CombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>`

#### getAccumulatorCoder

    public Coder<ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique> getAccumulatorCoder(CoderRegistry registry,
                                                                                                 Coder<T> inputCoder)

Description copied from interface: `CombineFnBase.GlobalCombineFn`
Returns the `Coder` to use for accumulator `AccumT` values, or null if it is not able to be inferred.

By default, uses the knowledge of the `Coder` being used for `InputT` values and the enclosing `Pipeline`'s `CoderRegistry` to try to infer the Coder for `AccumT` values.

This is the Coder used to send data through a communication-intensive shuffle step, so a compact and efficient representation may have significant performance benefits.

Specified by:
  `getAccumulatorCoder` in interface `CombineFnBase.GlobalCombineFn<T,ApproximateUnique.ApproximateUniqueCombineFn.LargestUnique,Long>`

#### getDefaultOutputCoder

    public Coder<OutputT> getDefaultOutputCoder(CoderRegistry registry,
                                                Coder<InputT> inputCoder)
                                         throws CannotProvideCoderException

Description copied from interface: `CombineFnBase.GlobalCombineFn`
Returns the `Coder` to use by default for output `OutputT` values, or null if it is not able to be inferred.

By default, uses the knowledge of the `Coder` being used for input `InputT` values and the enclosing `Pipeline`'s `CoderRegistry` to try to infer the Coder for `OutputT` values.

Specified by:
  `getDefaultOutputCoder` in interface `CombineFnBase.GlobalCombineFn<InputT,AccumT,OutputT>`
Throws:
  `CannotProvideCoderException`

#### getIncompatibleGlobalWindowErrorMessage

    public String getIncompatibleGlobalWindowErrorMessage()

Description copied from interface: `CombineFnBase.GlobalCombineFn`
Returns the error message for not supported default values in Combine.globally().

Specified by:
  `getIncompatibleGlobalWindowErrorMessage` in interface `CombineFnBase.GlobalCombineFn<InputT,AccumT,OutputT>`

#### getInputTVariable

    public TypeVariable<?> getInputTVariable()

Returns the `TypeVariable` of `InputT`.

#### getAccumTVariable

    public TypeVariable<?> getAccumTVariable()

Returns the `TypeVariable` of `AccumT`.

#### getOutputTVariable

    public TypeVariable<?> getOutputTVariable()

Returns the `TypeVariable` of `OutputT`.

#### populateDisplayData

    public void populateDisplayData(DisplayData.Builder builder)

Register display data for the given transform or component.

`populateDisplayData(DisplayData.Builder)` is invoked by Pipeline runners to collect display data via `DisplayData.from(HasDisplayData)`. Implementations may call `super.populateDisplayData(builder)` in order to register display data in the current namespace, but should otherwise use `subcomponent.populateDisplayData(builder)` to use the namespace of the subcomponent.

By default, does not register any display data. Implementors may override this method to provide their own display data.

Specified by:
  `populateDisplayData` in interface `HasDisplayData`
Parameters:
  `builder` - The builder to populate with display data.
See Also:
  `HasDisplayData`