# Apache Beam: KvSwap

## Overview

What if you have a Key-Value pair, but want to group on the values, not the keys? Should you write a custom doFn to switch the keys and values?

NO!

You should use the `KvSwap` transform!

## When You Should Use the KvSwap Transform

When you want to easily swap the keys and values of a PCollection of KV pairs.

## How to Use the KvSwap Transform

Just apply the built-in Transform to a PCollection of KVs. The output PCollection will have the Keys and Values swapped from the input KV.

## Example: Swap Keys and Values from Word Counts

```java
    // Create key/value pairs
    PCollection<KV<String, Integer>> pairs =
        pipeline.apply(
            Create.of(KV.of("one", 1), KV.of("two", 2), KV.of("three", 3), KV.of("four", 4)));
    // Returns KV collection with keys and values swapped: PCollection<KV<K,V>> ->
    // PCollection<KV<V,K>>
    PCollection<KV<Integer, String>> swap = pairs.apply(KvSwap.create());
    
```

## Conclusion

Check out other useful transforms from the [official Apache Beam documentation](https://beam.apache.org/documentation/transforms/java/overview/).
