com.google.cloud.dataflow.sdk.transforms

## Class CombineWithContext.KeyedCombineFnWithContext<K,InputT,AccumT,OutputT>

- java.lang.Object
- - com.google.cloud.dataflow.sdk.transforms.CombineWithContext.KeyedCombineFnWithContext<K,InputT,AccumT,OutputT>

All Implemented Interfaces:
  CombineFnBase.PerKeyCombineFn<K,InputT,AccumT,OutputT>, CombineWithContext.RequiresContextInternal, HasDisplayData, Serializable

Direct Known Subclasses:
  CombineFns.ComposedKeyedCombineFnWithContext

Enclosing class:
  CombineWithContext

    public abstract static class CombineWithContext.KeyedCombineFnWithContext<K,InputT,AccumT,OutputT>
    extends Object
    implements CombineWithContext.RequiresContextInternal

A keyed combine function that has access to `PipelineOptions` and side inputs through `CombineWithContext.Context`. See the equivalent `Combine.KeyedCombineFn` for details about keyed combine functions.

See Also:
  Serialized Form

### Constructor Summary

Constructors
Constructor and Description
`KeyedCombineFnWithContext()`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`abstract AccumT` `addInput(K key, AccumT accumulator, InputT value, CombineWithContext.Context c)` Adds the given input value to the given accumulator, returning the new accumulator value.
`OutputT` `apply(K key, Iterable<? extends InputT> inputs, CombineWithContext.Context c)` Applies this `KeyedCombineFnWithContext` to a key and a collection of input values to produce a combined output value.
`AccumT` `compact(K key, AccumT accumulator, CombineWithContext.Context c)` Returns an accumulator that represents the same logical value as the input accumulator, but may have a more compact representation.
`abstract AccumT` `createAccumulator(K key, CombineWithContext.Context c)` Returns a new, mutable accumulator value representing the accumulation of zero input values.
`abstract OutputT` `extractOutput(K key, AccumT accumulator, CombineWithContext.Context c)` Returns the output value that is the result of combining all the input values represented by the given accumulator.
`CombineWithContext.CombineFnWithContext<InputT,AccumT,OutputT>` `forKey(K key, Coder<K> keyCoder)` Returns the a regular `CombineFnBase.GlobalCombineFn` that operates on a specific key.
`TypeVariable<?>` `getAccumTVariable()` Returns the `TypeVariable` of `AccumT`.
`Coder<AccumT>` `getAccumulatorCoder(CoderRegistry registry, Coder<K> keyCoder, Coder<InputT> 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<K> keyCoder, Coder<InputT> inputCoder)` Returns the `Coder` to use by default for output `OutputT` values, or null if it is not able to be inferred.
`TypeVariable<?>` `getInputTVariable()` Returns the `TypeVariable` of `InputT`.
`TypeVariable<?>` `getKTypeVariable()` Returns the `TypeVariable` of `K`.
`TypeVariable<?>` `getOutputTVariable()` Returns the `TypeVariable` of `OutputT`.
`abstract AccumT` `mergeAccumulators(K key, Iterable<AccumT> accumulators, CombineWithContext.Context c)` 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 java.lang.Object

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

### Constructor Detail

#### KeyedCombineFnWithContext

    public KeyedCombineFnWithContext()

### Method Detail

#### createAccumulator

    public abstract AccumT createAccumulator(K key,
                                             CombineWithContext.Context c)

Returns a new, mutable accumulator value representing the accumulation of zero input values.

It is equivalent to `Combine.KeyedCombineFn.createAccumulator(K)`, but it has additional access to `CombineWithContext.Context`.

#### addInput

    public abstract AccumT addInput(K key,
                                    AccumT accumulator,
                                    InputT value,
                                    CombineWithContext.Context c)

Adds the given input value to the given accumulator, returning the new accumulator value.

It is equivalent to `Combine.KeyedCombineFn.addInput(K, AccumT, InputT)`, but it has additional access to `CombineWithContext.Context`.

#### mergeAccumulators

    public abstract AccumT mergeAccumulators(K key,
                                             Iterable<AccumT> accumulators,
                                             CombineWithContext.Context c)

Returns an accumulator representing the accumulation of all the input values accumulated in the merging accumulators.

It is equivalent to `Combine.KeyedCombineFn.mergeAccumulators(K, java.lang.Iterable<AccumT>)`, but it has additional access to `CombineWithContext.Context`..

#### extractOutput

    public abstract OutputT extractOutput(K key,
                                          AccumT accumulator,
                                          CombineWithContext.Context c)

Returns the output value that is the result of combining all the input values represented by the given accumulator.

It is equivalent to `Combine.KeyedCombineFn.extractOutput(K, AccumT)`, but it has additional access to `CombineWithContext.Context`.

#### compact

    public AccumT compact(K key,
                          AccumT accumulator,
                          CombineWithContext.Context c)

Returns an accumulator that represents the same logical value as the input accumulator, but may have a more compact representation.

It is equivalent to `Combine.KeyedCombineFn.compact(K, AccumT)`, but it has additional access to `CombineWithContext.Context`.

#### apply

    public OutputT apply(K key,
                         Iterable<? extends InputT> inputs,
                         CombineWithContext.Context c)

Applies this `KeyedCombineFnWithContext` to a key and a collection of input values to produce a combined output value.

#### forKey

    public CombineWithContext.CombineFnWithContext<InputT,AccumT,OutputT> forKey(K key,
                                                                                 Coder<K> keyCoder)

Description copied from interface: `CombineFnBase.PerKeyCombineFn`
Returns the a regular `CombineFnBase.GlobalCombineFn` that operates on a specific key.

Specified by:
  `forKey` in interface `CombineFnBase.PerKeyCombineFn<K,InputT,AccumT,OutputT>`

#### getAccumulatorCoder

    public Coder<AccumT> getAccumulatorCoder(CoderRegistry registry,
                                             Coder<K> keyCoder,
                                             Coder<InputT> inputCoder)
                                      throws CannotProvideCoderException

Description copied from interface: `CombineFnBase.PerKeyCombineFn`
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 `K` keys and input `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.PerKeyCombineFn<K,InputT,AccumT,OutputT>`
Throws:
  `CannotProvideCoderException`

#### getDefaultOutputCoder

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

Description copied from interface: `CombineFnBase.PerKeyCombineFn`
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 `K` keys and input `InputT` values and the enclosing `Pipeline`'s `CoderRegistry` to try to infer the Coder for `OutputT` values.

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

#### getKTypeVariable

    public TypeVariable<?> getKTypeVariable()

Returns the `TypeVariable` of `K`.

#### 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`