blob: be688399f4e3f43debb9d04e9e314dab63843683 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>Combine.CombineFn (Apache Beam 2.47.0)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Combine.CombineFn (Apache Beam 2.47.0)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":10,"i2":10,"i3":6,"i4":10,"i5":6,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":6,"i15":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineLongFn.html" title="class in org.apache.beam.sdk.transforms"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/beam/sdk/transforms/Combine.Globally.html" title="class in org.apache.beam.sdk.transforms"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/beam/sdk/transforms/Combine.CombineFn.html" target="_top">Frames</a></li>
<li><a href="Combine.CombineFn.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.transforms</div>
<h2 title="Class Combine.CombineFn" class="title">Class Combine.CombineFn&lt;InputT,AccumT,OutputT&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.transforms.Combine.CombineFn&lt;InputT,AccumT,OutputT&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>InputT</code> - type of input values</dd>
<dd><code>AccumT</code> - type of mutable accumulator values</dd>
<dd><code>OutputT</code> - type of output values</dd>
</dl>
<dl>
<dt>All Implemented Interfaces:</dt>
<dd>java.io.Serializable, <a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html" title="interface in org.apache.beam.sdk.transforms">CombineFnBase.GlobalCombineFn</a>&lt;InputT,AccumT,OutputT&gt;, <a href="../../../../../org/apache/beam/sdk/transforms/display/HasDisplayData.html" title="interface in org.apache.beam.sdk.transforms.display">HasDisplayData</a></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../org/apache/beam/sdk/extensions/sketching/ApproximateDistinct.ApproximateDistinctFn.html" title="class in org.apache.beam.sdk.extensions.sketching">ApproximateDistinct.ApproximateDistinctFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/ApproximateUnique.ApproximateUniqueCombineFn.html" title="class in org.apache.beam.sdk.transforms">ApproximateUnique.ApproximateUniqueCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/udaf/ArrayAgg.ArrayAggArray.html" title="class in org.apache.beam.sdk.extensions.sql.impl.udaf">ArrayAgg.ArrayAggArray</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/transform/BeamBuiltinAggregations.BitXOr.html" title="class in org.apache.beam.sdk.extensions.sql.impl.transform">BeamBuiltinAggregations.BitXOr</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/transform/BeamBuiltinAnalyticFunctions.PositionAwareCombineFn.html" title="class in org.apache.beam.sdk.extensions.sql.impl.transform">BeamBuiltinAnalyticFunctions.PositionAwareCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.AccumulatingCombineFn.html" title="class in org.apache.beam.sdk.transforms">Combine.AccumulatingCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineDoubleFn.html" title="class in org.apache.beam.sdk.transforms">Combine.BinaryCombineDoubleFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineFn.html" title="class in org.apache.beam.sdk.transforms">Combine.BinaryCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineIntegerFn.html" title="class in org.apache.beam.sdk.transforms">Combine.BinaryCombineIntegerFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineLongFn.html" title="class in org.apache.beam.sdk.transforms">Combine.BinaryCombineLongFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.IterableCombineFn.html" title="class in org.apache.beam.sdk.transforms">Combine.IterableCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/CombineFns.ComposedCombineFn.html" title="class in org.apache.beam.sdk.transforms">CombineFns.ComposedCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/transform/agg/CountIf.CountIfFn.html" title="class in org.apache.beam.sdk.extensions.sql.impl.transform.agg">CountIf.CountIfFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/transform/agg/CovarianceFn.html" title="class in org.apache.beam.sdk.extensions.sql.impl.transform.agg">CovarianceFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/LazyAggregateCombineFn.html" title="class in org.apache.beam.sdk.extensions.sql.impl">LazyAggregateCombineFn</a>, <a href="../../../../../org/apache/beam/sdk/transforms/Sample.FixedSizedSampleFn.html" title="class in org.apache.beam.sdk.transforms">Sample.FixedSizedSampleFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sketching/SketchFrequencies.CountMinSketchFn.html" title="class in org.apache.beam.sdk.extensions.sketching">SketchFrequencies.CountMinSketchFn</a>, <a href="../../../../../org/apache/beam/sdk/io/snowflake/SnowflakeIO.Concatenate.html" title="class in org.apache.beam.sdk.io.snowflake">SnowflakeIO.Concatenate</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/udaf/StringAgg.StringAggByte.html" title="class in org.apache.beam.sdk.extensions.sql.impl.udaf">StringAgg.StringAggByte</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/udaf/StringAgg.StringAggString.html" title="class in org.apache.beam.sdk.extensions.sql.impl.udaf">StringAgg.StringAggString</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sketching/TDigestQuantiles.TDigestQuantilesFn.html" title="class in org.apache.beam.sdk.extensions.sketching">TDigestQuantiles.TDigestQuantilesFn</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/TypedCombineFnDelegate.html" title="class in org.apache.beam.sdk.extensions.sql">TypedCombineFnDelegate</a>, <a href="../../../../../org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.html" title="class in org.apache.beam.sdk.extensions.sql.impl.transform.agg">VarianceFn</a></dd>
</dl>
<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../../../org/apache/beam/sdk/transforms/Combine.html" title="class in org.apache.beam.sdk.transforms">Combine</a></dd>
</dl>
<hr>
<br>
<pre>public abstract static class <span class="typeNameLabel">Combine.CombineFn&lt;InputT,AccumT,OutputT&gt;</span>
extends java.lang.Object</pre>
<div class="block">A <code>CombineFn&lt;InputT, AccumT, OutputT&gt;</code> specifies how to combine a collection of input
values of type <code>InputT</code> into a single output value of type <code>OutputT</code>. It does this
via one or more intermediate mutable accumulator values of type <code>AccumT</code>.
<p>The overall process to combine a collection of input <code>InputT</code> values into a single
output <code>OutputT</code> value is as follows:
<ol>
<li>The input <code>InputT</code> values are partitioned into one or more batches.
<li>For each batch, the <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#createAccumulator--"><code>createAccumulator()</code></a> operation is invoked to create a fresh
mutable accumulator value of type <code>AccumT</code>, initialized to represent the
combination of zero values.
<li>For each input <code>InputT</code> value in a batch, the <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#addInput-AccumT-InputT-"><code>addInput(AccumT, InputT)</code></a> operation is
invoked to add the value to that batch's accumulator <code>AccumT</code> value. The
accumulator may just record the new value (e.g., if <code>AccumT == List&lt;InputT&gt;</code>, or
may do work to represent the combination more compactly.
<li>The <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#mergeAccumulators-java.lang.Iterable-"><code>mergeAccumulators(java.lang.Iterable&lt;AccumT&gt;)</code></a> operation is invoked to combine a collection of
accumulator <code>AccumT</code> values into a single combined output accumulator <code>AccumT</code> value, once the merging accumulators have had all all the input values in their
batches added to them. This operation is invoked repeatedly, until there is only one
accumulator value left.
<li>The <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#extractOutput-AccumT-"><code>extractOutput(AccumT)</code></a> operation is invoked on the final accumulator <code>AccumT</code>
value to get the output <code>OutputT</code> value.
</ol>
<p>For example:
<pre><code>
public class AverageFn extends CombineFn&lt;Integer, AverageFn.Accum, Double&gt; {
public static class Accum implements Serializable {
int sum = 0;
int count = 0;
@Override
public boolean equals(@Nullable Object other) {
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Accum))return false;
Accum o = (Accum)other;
if (this.sum != o.sum || this.count != o.count) {
return false;
} else {
return true;
}
}
}
public Accum createAccumulator() {
return new Accum();
}
public Accum addInput(Accum accum, Integer input) {
accum.sum += input;
accum.count++;
return accum;
}
public Accum mergeAccumulators(Iterable&lt;Accum&gt; accums) {
Accum merged = createAccumulator();
for (Accum accum : accums) {
merged.sum += accum.sum;
merged.count += accum.count;
}
return merged;
}
public Double extractOutput(Accum accum) {
return ((double) accum.sum) / accum.count;
}
}
PCollection&lt;Integer&gt; pc = ...;
PCollection&lt;Double&gt; average = pc.apply(Combine.globally(new AverageFn()));
</code></pre>
<p>Combining functions used by <a href="../../../../../org/apache/beam/sdk/transforms/Combine.Globally.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.Globally</code></a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.PerKey.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.PerKey</code></a>, <a href="../../../../../org/apache/beam/sdk/transforms/Combine.GroupedValues.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.GroupedValues</code></a>, and <code>PTransforms</code> derived from them should be <i>associative</i>
and <i>commutative</i>. Associativity is required because input values are first broken up into
subgroups before being combined, and their intermediate results further combined, in an
arbitrary tree structure. Commutativity is required because any order of the input values is
ignored when breaking up input values into groups.
<h3>Note on Data Encoding</h3>
<p>Some form of data encoding is required when using custom types in a CombineFn which do not
have well-known coders. The sample code above uses a custom Accumulator which gets coder by
implementing <code>Serializable</code>. By doing this, we are relying on the generic <a href="../../../../../org/apache/beam/sdk/coders/CoderProvider.html" title="class in org.apache.beam.sdk.coders"><code>CoderProvider</code></a>, which is able to provide a coder for any <code>Serializable</code> if applicable. In cases where <code>Serializable</code> is not
efficient, or inapplicable, in general there are two alternatives for encoding:
<ul>
<li>Default <a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders"><code>CoderRegistry</code></a>. For example, implement a coder
class explicitly and use the <code>@DefaultCoder</code> tag. See the <a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders"><code>CoderRegistry</code></a> for the numerous ways in which to bind a type
to a coder.
<li>CombineFn specific way. While extending CombineFn, overwrite both <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getAccumulatorCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-"><code>getAccumulatorCoder(org.apache.beam.sdk.coders.CoderRegistry, org.apache.beam.sdk.coders.Coder&lt;InputT&gt;)</code></a> and <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getDefaultOutputCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-"><code>getDefaultOutputCoder(org.apache.beam.sdk.coders.CoderRegistry, org.apache.beam.sdk.coders.Coder&lt;InputT&gt;)</code></a>.
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../serialized-form.html#org.apache.beam.sdk.transforms.Combine.CombineFn">Serialized Form</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#CombineFn--">CombineFn</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>abstract <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#addInput-AccumT-InputT-">addInput</a></span>(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;mutableAccumulator,
<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&nbsp;input)</code>
<div class="block">Adds the given input value to the given accumulator, returning the new accumulator value.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#apply-java.lang.Iterable-">apply</a></span>(java.lang.Iterable&lt;? extends <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&gt;&nbsp;inputs)</code>
<div class="block">Applies this <code>CombineFn</code> to a collection of input values to produce a combined output
value.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#compact-AccumT-">compact</a></span>(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;accumulator)</code>
<div class="block">Returns an accumulator that represents the same logical value as the input accumulator, but
may have a more compact representation.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#createAccumulator--">createAccumulator</a></span>()</code>
<div class="block">Returns a new, mutable accumulator value, representing the accumulation of zero input values.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#defaultValue--">defaultValue</a></span>()</code>
<div class="block">Returns the default value when there are no values added to the accumulator.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#extractOutput-AccumT-">extractOutput</a></span>(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;accumulator)</code>
<div class="block">Returns the output value that is the result of combining all the input values represented by
the given accumulator.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>java.lang.reflect.TypeVariable&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getAccumTVariable--">getAccumTVariable</a></span>()</code>
<div class="block">Returns the <code>TypeVariable</code> of <code>AccumT</code>.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;AccumT&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getAccumulatorCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">getAccumulatorCoder</a></span>(<a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders">CoderRegistry</a>&nbsp;registry,
<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;InputT&gt;&nbsp;inputCoder)</code>
<div class="block">Returns the <code>Coder</code> to use for accumulator <code>AccumT</code> values, or null if it is not
able to be inferred.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;OutputT&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getDefaultOutputCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">getDefaultOutputCoder</a></span>(<a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders">CoderRegistry</a>&nbsp;registry,
<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;InputT&gt;&nbsp;inputCoder)</code>
<div class="block">Returns the <code>Coder</code> to use by default for output <code>OutputT</code> values, or null if it
is not able to be inferred.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getIncompatibleGlobalWindowErrorMessage--">getIncompatibleGlobalWindowErrorMessage</a></span>()</code>
<div class="block">Returns the error message for not supported default values in Combine.globally().</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>java.lang.reflect.TypeVariable&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getInputTVariable--">getInputTVariable</a></span>()</code>
<div class="block">Returns the <code>TypeVariable</code> of <code>InputT</code>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values">TypeDescriptor</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getInputType--">getInputType</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values"><code>TypeDescriptor</code></a> capturing what is known statically about the input type of
this <code>CombineFn</code> instance's most-derived class.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>java.lang.reflect.TypeVariable&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getOutputTVariable--">getOutputTVariable</a></span>()</code>
<div class="block">Returns the <code>TypeVariable</code> of <code>OutputT</code>.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values">TypeDescriptor</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#getOutputType--">getOutputType</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values"><code>TypeDescriptor</code></a> capturing what is known statically about the output type of
this <code>CombineFn</code> instance's most-derived class.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>abstract <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#mergeAccumulators-java.lang.Iterable-">mergeAccumulators</a></span>(java.lang.Iterable&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&gt;&nbsp;accumulators)</code>
<div class="block">Returns an accumulator representing the accumulation of all the input values accumulated in
the merging accumulators.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#populateDisplayData-org.apache.beam.sdk.transforms.display.DisplayData.Builder-">populateDisplayData</a></span>(<a href="../../../../../org/apache/beam/sdk/transforms/display/DisplayData.Builder.html" title="interface in org.apache.beam.sdk.transforms.display">DisplayData.Builder</a>&nbsp;builder)</code>
<div class="block">Register display data for the given transform or component.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="CombineFn--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>CombineFn</h4>
<pre>public&nbsp;CombineFn()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="createAccumulator--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createAccumulator</h4>
<pre>public abstract&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;createAccumulator()</pre>
<div class="block">Returns a new, mutable accumulator value, representing the accumulation of zero input values.</div>
</li>
</ul>
<a name="addInput-java.lang.Object-java.lang.Object-">
<!-- -->
</a><a name="addInput-AccumT-InputT-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addInput</h4>
<pre>public abstract&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;addInput(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;mutableAccumulator,
<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&nbsp;input)</pre>
<div class="block">Adds the given input value to the given accumulator, returning the new accumulator value.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mutableAccumulator</code> - may be modified and returned for efficiency</dd>
<dd><code>input</code> - should not be mutated</dd>
</dl>
</li>
</ul>
<a name="mergeAccumulators-java.lang.Iterable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mergeAccumulators</h4>
<pre>public abstract&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;mergeAccumulators(java.lang.Iterable&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&gt;&nbsp;accumulators)</pre>
<div class="block">Returns an accumulator representing the accumulation of all the input values accumulated in
the merging accumulators.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>accumulators</code> - only the first accumulator may be modified and returned for efficiency;
the other accumulators should not be mutated, because they may be shared with other code
and mutating them could lead to incorrect results or data corruption.</dd>
</dl>
</li>
</ul>
<a name="extractOutput-java.lang.Object-">
<!-- -->
</a><a name="extractOutput-AccumT-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>extractOutput</h4>
<pre>public abstract&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a>&nbsp;extractOutput(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;accumulator)</pre>
<div class="block">Returns the output value that is the result of combining all the input values represented by
the given accumulator.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>accumulator</code> - can be modified for efficiency</dd>
</dl>
</li>
</ul>
<a name="compact-java.lang.Object-">
<!-- -->
</a><a name="compact-AccumT-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>compact</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;compact(<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">AccumT</a>&nbsp;accumulator)</pre>
<div class="block">Returns an accumulator that represents the same logical value as the input accumulator, but
may have a more compact representation.
<p>For most CombineFns this would be a no-op, but should be overridden by CombineFns that
(for example) buffer up elements and combine them in batches.
<p>For efficiency, the input accumulator may be modified and returned.
<p>By default returns the original accumulator.</div>
</li>
</ul>
<a name="apply-java.lang.Iterable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>apply</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a>&nbsp;apply(java.lang.Iterable&lt;? extends <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&gt;&nbsp;inputs)</pre>
<div class="block">Applies this <code>CombineFn</code> to a collection of input values to produce a combined output
value.
<p>Useful when using a <code>CombineFn</code> separately from a <code>Combine</code> transform. Does
not invoke the <a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html#mergeAccumulators-java.lang.Iterable-"><code>mergeAccumulators(java.lang.Iterable&lt;AccumT&gt;)</code></a> operation.</div>
</li>
</ul>
<a name="defaultValue--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>defaultValue</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a>&nbsp;defaultValue()</pre>
<div class="block">Returns the default value when there are no values added to the accumulator.
<p>By default returns the extract output of an empty accumulator.</div>
</li>
</ul>
<a name="getOutputType--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOutputType</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values">TypeDescriptor</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">OutputT</a>&gt;&nbsp;getOutputType()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values"><code>TypeDescriptor</code></a> capturing what is known statically about the output type of
this <code>CombineFn</code> instance's most-derived class.
<p>In the normal case of a concrete <code>CombineFn</code> subclass with no generic type
parameters of its own, this will be a complete non-generic type.</div>
</li>
</ul>
<a name="getInputType--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getInputType</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values">TypeDescriptor</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="type parameter in Combine.CombineFn">InputT</a>&gt;&nbsp;getInputType()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/values/TypeDescriptor.html" title="class in org.apache.beam.sdk.values"><code>TypeDescriptor</code></a> capturing what is known statically about the input type of
this <code>CombineFn</code> instance's most-derived class.
<p>In the normal case of a concrete <code>CombineFn</code> subclass with no generic type
parameters of its own, this will be a complete non-generic type.</div>
</li>
</ul>
<a name="getAccumulatorCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAccumulatorCoder</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;AccumT&gt;&nbsp;getAccumulatorCoder(<a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders">CoderRegistry</a>&nbsp;registry,
<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;InputT&gt;&nbsp;inputCoder)
throws <a href="../../../../../org/apache/beam/sdk/coders/CannotProvideCoderException.html" title="class in org.apache.beam.sdk.coders">CannotProvideCoderException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getAccumulatorCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">CombineFnBase.GlobalCombineFn</a></code></span></div>
<div class="block">Returns the <code>Coder</code> to use for accumulator <code>AccumT</code> values, or null if it is not
able to be inferred.
<p>By default, uses the knowledge of the <code>Coder</code> being used for <code>InputT</code> values
and the enclosing <code>Pipeline</code>'s <code>CoderRegistry</code> to try to infer the Coder for
<code>AccumT</code> values.
<p>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.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getAccumulatorCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">getAccumulatorCoder</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html" title="interface in org.apache.beam.sdk.transforms">CombineFnBase.GlobalCombineFn</a>&lt;InputT,AccumT,OutputT&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/coders/CannotProvideCoderException.html" title="class in org.apache.beam.sdk.coders">CannotProvideCoderException</a></code></dd>
</dl>
</li>
</ul>
<a name="getDefaultOutputCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDefaultOutputCoder</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;OutputT&gt;&nbsp;getDefaultOutputCoder(<a href="../../../../../org/apache/beam/sdk/coders/CoderRegistry.html" title="class in org.apache.beam.sdk.coders">CoderRegistry</a>&nbsp;registry,
<a href="../../../../../org/apache/beam/sdk/coders/Coder.html" title="class in org.apache.beam.sdk.coders">Coder</a>&lt;InputT&gt;&nbsp;inputCoder)
throws <a href="../../../../../org/apache/beam/sdk/coders/CannotProvideCoderException.html" title="class in org.apache.beam.sdk.coders">CannotProvideCoderException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getDefaultOutputCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">CombineFnBase.GlobalCombineFn</a></code></span></div>
<div class="block">Returns the <code>Coder</code> to use by default for output <code>OutputT</code> values, or null if it
is not able to be inferred.
<p>By default, uses the knowledge of the <code>Coder</code> being used for input <code>InputT</code>
values and the enclosing <code>Pipeline</code>'s <code>CoderRegistry</code> to try to infer the Coder
for <code>OutputT</code> values.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getDefaultOutputCoder-org.apache.beam.sdk.coders.CoderRegistry-org.apache.beam.sdk.coders.Coder-">getDefaultOutputCoder</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html" title="interface in org.apache.beam.sdk.transforms">CombineFnBase.GlobalCombineFn</a>&lt;InputT,AccumT,OutputT&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/coders/CannotProvideCoderException.html" title="class in org.apache.beam.sdk.coders">CannotProvideCoderException</a></code></dd>
</dl>
</li>
</ul>
<a name="getIncompatibleGlobalWindowErrorMessage--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIncompatibleGlobalWindowErrorMessage</h4>
<pre>public&nbsp;java.lang.String&nbsp;getIncompatibleGlobalWindowErrorMessage()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getIncompatibleGlobalWindowErrorMessage--">CombineFnBase.GlobalCombineFn</a></code></span></div>
<div class="block">Returns the error message for not supported default values in Combine.globally().</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html#getIncompatibleGlobalWindowErrorMessage--">getIncompatibleGlobalWindowErrorMessage</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/CombineFnBase.GlobalCombineFn.html" title="interface in org.apache.beam.sdk.transforms">CombineFnBase.GlobalCombineFn</a>&lt;InputT,AccumT,OutputT&gt;</code></dd>
</dl>
</li>
</ul>
<a name="getInputTVariable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getInputTVariable</h4>
<pre>public&nbsp;java.lang.reflect.TypeVariable&lt;?&gt;&nbsp;getInputTVariable()</pre>
<div class="block">Returns the <code>TypeVariable</code> of <code>InputT</code>.</div>
</li>
</ul>
<a name="getAccumTVariable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAccumTVariable</h4>
<pre>public&nbsp;java.lang.reflect.TypeVariable&lt;?&gt;&nbsp;getAccumTVariable()</pre>
<div class="block">Returns the <code>TypeVariable</code> of <code>AccumT</code>.</div>
</li>
</ul>
<a name="getOutputTVariable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOutputTVariable</h4>
<pre>public&nbsp;java.lang.reflect.TypeVariable&lt;?&gt;&nbsp;getOutputTVariable()</pre>
<div class="block">Returns the <code>TypeVariable</code> of <code>OutputT</code>.</div>
</li>
</ul>
<a name="populateDisplayData-org.apache.beam.sdk.transforms.display.DisplayData.Builder-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>populateDisplayData</h4>
<pre>public&nbsp;void&nbsp;populateDisplayData(<a href="../../../../../org/apache/beam/sdk/transforms/display/DisplayData.Builder.html" title="interface in org.apache.beam.sdk.transforms.display">DisplayData.Builder</a>&nbsp;builder)</pre>
<div class="block">Register display data for the given transform or component.
<p><code>populateDisplayData(DisplayData.Builder)</code> is invoked by Pipeline runners to collect
display data via <a href="../../../../../org/apache/beam/sdk/transforms/display/DisplayData.html#from-org.apache.beam.sdk.transforms.display.HasDisplayData-"><code>DisplayData.from(HasDisplayData)</code></a>. Implementations may call <code>super.populateDisplayData(builder)</code> in order to register display data in the current namespace,
but should otherwise use <code>subcomponent.populateDisplayData(builder)</code> to use the namespace
of the subcomponent.
<p>By default, does not register any display data. Implementors may override this method to
provide their own display data.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/transforms/display/HasDisplayData.html#populateDisplayData-org.apache.beam.sdk.transforms.display.DisplayData.Builder-">populateDisplayData</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/beam/sdk/transforms/display/HasDisplayData.html" title="interface in org.apache.beam.sdk.transforms.display">HasDisplayData</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>builder</code> - The builder to populate with display data.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/beam/sdk/transforms/display/HasDisplayData.html" title="interface in org.apache.beam.sdk.transforms.display"><code>HasDisplayData</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/beam/sdk/transforms/Combine.BinaryCombineLongFn.html" title="class in org.apache.beam.sdk.transforms"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/beam/sdk/transforms/Combine.Globally.html" title="class in org.apache.beam.sdk.transforms"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/beam/sdk/transforms/Combine.CombineFn.html" target="_top">Frames</a></li>
<li><a href="Combine.CombineFn.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>