@ProcessElement public void processElement(@Element X input, MultiOutputReceiver r) { int partition = partitionFn.partitionFor(input, numPartitions); if (0 <= partition && partition < numPartitions) { @SuppressWarnings("unchecked") TupleTag<X> typedTag = (TupleTag<X>) outputTags.get(partition); r.get(typedTag).output(input); } else { throw new IndexOutOfBoundsException( "Partition function returned out of bounds index: " + partition + " not in [0.." + numPartitions + ")"); } }
@ProcessElement public void processElement( @Element Integer element, MultiOutputReceiver r) { r.get(additionalOutputTag) .outputWithTimestamp(element, new Instant(element.longValue())); } })
@ProcessElement public void processElement( @Element KV<K, InputT> kv, MultiOutputReceiver receiver) { int spread = hotKeyFanout.apply(kv.getKey()); if (spread <= 1) { receiver.get(cold).output(kv); } else { receiver .get(hot) .output(KV.of(KV.of(kv.getKey(), nonce % spread), kv.getValue())); } } })
@ProcessElement public void processElement( @Element Integer element, MultiOutputReceiver r) { r.get(additionalOutputTag).output(element); } })
@ProcessElement public void processElement( @StateId(stateId) ValueState<Integer> state, MultiOutputReceiver r) { Integer currentValue = MoreObjects.firstNonNull(state.read(), 0); if (currentValue % 2 == 0) { r.get(evenTag).output(currentValue); } else { r.get(oddTag).output(currentValue); } state.write(currentValue + 1); } };