com.google.cloud.dataflow.sdk.transforms

## Class WithKeys<K,V>

- java.lang.Object
- - com.google.cloud.dataflow.sdk.transforms.PTransform<PCollection<V>,PCollection<KV<K,V>>>
  - - com.google.cloud.dataflow.sdk.transforms.WithKeys<K,V>

Type Parameters:
  `K` - the type of the keys in the output `PCollection`
  `V` - the type of the elements in the input `PCollection` and the values in the output `PCollection`

All Implemented Interfaces:
  HasDisplayData, Serializable

    public class WithKeys<K,V>
    extends PTransform<PCollection<V>,PCollection<KV<K,V>>>

`WithKeys<K, V>` takes a `PCollection<V>`, and either a constant key of type `K` or a function from `V` to `K`, and returns a `PCollection<KV<K, V>>`, where each of the values in the input `PCollection` has been paired with either the constant key or a key computed from the value.

Example of use:

     PCollection<String> words = ...;
     PCollection<KV<Integer, String>> lengthsToWords =
         words.apply(WithKeys.of(new SerializableFunction<String, Integer>() {
             public Integer apply(String s) { return s.length(); } }));

Each output element has the same timestamp and is in the same windows as its corresponding input element, and the output `PCollection` has the same `WindowFn` associated with it as the input.

See Also:
  Serialized Form

### Field Summary

### Fields inherited from class com.google.cloud.dataflow.sdk.transforms.PTransform

`name`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`PCollection<KV<K,V>>` `apply(PCollection<V> in)` Applies this `PTransform` on the given `InputT`, and returns its `Output`.
`static <K,V> WithKeys<K,V>` `of(K key)` Returns a `PTransform` that takes a `PCollection<V>` and returns a `PCollection<KV<K, V>>`, where each of the values in the input `PCollection` has been paired with the given key.
`static <K,V> WithKeys<K,V>` `of(SerializableFunction<V,K> fn)` Returns a `PTransform` that takes a `PCollection<V>` and returns a `PCollection<KV<K, V>>`, where each of the values in the input `PCollection` has been paired with a key computed from the value by invoking the given `SerializableFunction`.
`WithKeys<K,V>` `withKeyType(TypeDescriptor<K> keyType)` Return a `WithKeys` that is like this one with the specified key type descriptor.

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

`getDefaultOutputCoder, getDefaultOutputCoder, getDefaultOutputCoder, getKindString, getName, populateDisplayData, toString, validate`

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

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

### Method Detail

#### of

    public static <K,V> WithKeys<K,V> of(SerializableFunction<V,K> fn)

Returns a `PTransform` that takes a `PCollection<V>` and returns a `PCollection<KV<K, V>>`, where each of the values in the input `PCollection` has been paired with a key computed from the value by invoking the given `SerializableFunction`.

If using a lambda in Java 8, `withKeyType(TypeDescriptor)` must be called on the result `PTransform`.

#### of

    public static <K,V> WithKeys<K,V> of(K key)

Returns a `PTransform` that takes a `PCollection<V>` and returns a `PCollection<KV<K, V>>`, where each of the values in the input `PCollection` has been paired with the given key.

#### withKeyType

    public WithKeys<K,V> withKeyType(TypeDescriptor<K> keyType)

Return a `WithKeys` that is like this one with the specified key type descriptor. For use with lambdas in Java 8, either this method must be called with an appropriate type descriptor or `PCollection.setCoder(Coder)` must be called on the output `PCollection`.

#### apply

    public PCollection<KV<K,V>> apply(PCollection<V> in)

Description copied from class: `PTransform`
Applies this `PTransform` on the given `InputT`, and returns its `Output`.

Composite transforms, which are defined in terms of other transforms, should return the output of one of the composed transforms. Non-composite transforms, which do not apply any transforms internally, should return a new unbound output and register evaluators (via backend-specific registration methods).

The default implementation throws an exception. A derived class must either implement apply, or else each runner must supply a custom implementation via `PipelineRunner.apply(com.google.cloud.dataflow.sdk.transforms.PTransform<InputT, OutputT>, InputT)`.

Overrides:
  `apply` in class `PTransform<PCollection<V>,PCollection<KV<K,V>>>`