blob: db0f55458cb5511c5e08cd9d283af6a40c82017e [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 (1.8.0_161-google-v7) on Thu Oct 18 16:14:35 PDT 2018 -->
<title>Group (Apache Beam 2.8.0-SNAPSHOT)</title>
<meta name="date" content="2018-10-18">
<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="Group (Apache Beam 2.8.0-SNAPSHOT)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static 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/schemas/transforms/Filter.Inner.html" title="class in org.apache.beam.sdk.schemas.transforms"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/beam/sdk/schemas/transforms/Group.html" target="_top">Frames</a></li>
<li><a href="Group.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><a href="#nested.class.summary">Nested</a>&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.schemas.transforms</div>
<h2 title="Class Group" class="title">Class Group</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.schemas.transforms.Group</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre><a href="../../../../../../org/apache/beam/sdk/annotations/Experimental.html" title="annotation in org.apache.beam.sdk.annotations">@Experimental</a>(<a href="../../../../../../org/apache/beam/sdk/annotations/Experimental.html#value--">value</a>=<a href="../../../../../../org/apache/beam/sdk/annotations/Experimental.Kind.html#SCHEMAS">SCHEMAS</a>)
public class <span class="typeNameLabel">Group</span>
extends java.lang.Object</pre>
<div class="block">A generic grouping transform for schema <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a>s.
<p>When used without a combiner, this transforms simply acts as a <a href="../../../../../../org/apache/beam/sdk/transforms/GroupByKey.html" title="class in org.apache.beam.sdk.transforms"><code>GroupByKey</code></a> but without
the need for the user to explicitly extract the keys. For example, consider the following input
type:
<pre><code>
{@literal @DefaultSchema(JavaFieldSchema.class)}
public class UserPurchase {
public String userId;
public String country;
public long cost;
public double transactionDuration;
}
{@literal PCollection&lt;UserPurchase&gt;} purchases = readUserPurchases();
</code></pre>
<p>You can group all purchases by user and country as follows:
<pre><code>
{@literal @DefaultSchema}(JavaFieldSchema.class)
{@literal PCollection&lt;KV&lt;Row, Iterable&lt;UserPurchase&gt;&gt;} byUser =
purchases.apply(Group.byFieldNames("userId', "country"));
</code></pre>
<p>However often an aggregation of some form is desired. The builder methods inside the Group
class allows building up separate aggregations for every field (or set of fields) on the input
schema, and generating an output schema based on these aggregations. For example:
<pre><code>
PCollection&lt;KV&lt;Row, Row&gt;&gt; aggregated = purchases
.apply(Group.byFieldNames("userId', "country")
.aggregateField("cost", Sum.ofLongs(), "total_cost")
.aggregateField("cost", Top.&lt;Long&gt;largestLongsFn(10), "top_purchases")
.aggregateField("cost", ApproximateQuantilesCombineFn.create(21),
Field.of("transactionDurations", FieldType.array(FieldType.INT64)));
</code></pre>
<p>The result will be a new row schema containing the fields total_cost, top_purchases, and
transactionDurations, containing the sum of all purchases costs (for that user and country), the
top ten purchases, and a histogram of transaction durations.
<p>Note that usually the field type can be automatically inferred from the <a href="../../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.CombineFn</code></a>
passed in. However sometimes it cannot be inferred, due to Java type erasure, in which case a
<a href="../../../../../../org/apache/beam/sdk/schemas/Schema.Field.html" title="class in org.apache.beam.sdk.schemas"><code>Schema.Field</code></a> object containing the field type must be passed in. This is currently the case for
ApproximateQuantilesCombineFn in the above example.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="type parameter in Group.ByFields">InputT</a>&gt;</span></code>
<div class="block">a <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that groups schema elements based on the given fields.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.CombineByFields</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineByFields.html" title="type parameter in Group.CombineByFields">InputT</a>,<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineByFields.html" title="type parameter in Group.CombineByFields">OutputT</a>&gt;</span></code>
<div class="block">a <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that does a per0-key combine using a specified <a href="../../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.CombineFn</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineFieldsByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.CombineFieldsByFields</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineFieldsByFields.html" title="type parameter in Group.CombineFieldsByFields">InputT</a>&gt;</span></code>
<div class="block">a <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that does a per-key combine using an aggregation built up by calls to
aggregateField and aggregateFields.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineFieldsGlobally.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.CombineFieldsGlobally</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineFieldsGlobally.html" title="type parameter in Group.CombineFieldsGlobally">InputT</a>&gt;</span></code>
<div class="block">a <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that does a global combine using an aggregation built up by calls to
aggregateField and aggregateFields.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineGlobally.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.CombineGlobally</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineGlobally.html" title="type parameter in Group.CombineGlobally">InputT</a>,<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.CombineGlobally.html" title="type parameter in Group.CombineGlobally">OutputT</a>&gt;</span></code>
<div class="block">a <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that does a global combine using a provider <a href="../../../../../../org/apache/beam/sdk/transforms/Combine.CombineFn.html" title="class in org.apache.beam.sdk.transforms"><code>Combine.CombineFn</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.Global.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.Global</a>&lt;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.Global.html" title="type parameter in Group.Global">InputT</a>&gt;</span></code>
<div class="block">A <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> for doing global aggregations on schema PCollections.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== 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/schemas/transforms/Group.html#Group--">Group</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="t1" class="tableTab"><span><a href="javascript:show(1);">Static 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>static &lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.html#byFieldAccessDescriptor-org.apache.beam.sdk.schemas.FieldAccessDescriptor-">byFieldAccessDescriptor</a></span>(<a href="../../../../../../org/apache/beam/sdk/schemas/FieldAccessDescriptor.html" title="class in org.apache.beam.sdk.schemas">FieldAccessDescriptor</a>&nbsp;fieldAccess)</code>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the
fields specified.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.html#byFieldIds-java.lang.Integer...-">byFieldIds</a></span>(java.lang.Integer...&nbsp;fieldIds)</code>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the list
of fields specified.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.html#byFieldNames-java.lang.String...-">byFieldNames</a></span>(java.lang.String...&nbsp;fieldNames)</code>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the list
of fields specified.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.Global.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.Global</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.html#globally--">globally</a></span>()</code>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a>.</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="Group--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>Group</h4>
<pre>public&nbsp;Group()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="globally--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>globally</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.Global.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.Global</a>&lt;T&gt;&nbsp;globally()</pre>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a>. The returned
transform contains further builder methods to control how the grouping is done.</div>
</li>
</ul>
<a name="byFieldNames-java.lang.String...-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>byFieldNames</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;&nbsp;byFieldNames(java.lang.String...&nbsp;fieldNames)</pre>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the list
of fields specified. The output of this transform will be a <a href="../../../../../../org/apache/beam/sdk/values/KV.html" title="class in org.apache.beam.sdk.values"><code>KV</code></a> keyed by a <a href="../../../../../../org/apache/beam/sdk/values/Row.html" title="class in org.apache.beam.sdk.values"><code>Row</code></a>
containing the specified extracted fields. The returned transform contains further builder
methods to control how the grouping is done.</div>
</li>
</ul>
<a name="byFieldIds-java.lang.Integer...-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>byFieldIds</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;&nbsp;byFieldIds(java.lang.Integer...&nbsp;fieldIds)</pre>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the list
of fields specified. The output of this transform will be a <a href="../../../../../../org/apache/beam/sdk/values/KV.html" title="class in org.apache.beam.sdk.values"><code>KV</code></a> keyed by a <a href="../../../../../../org/apache/beam/sdk/values/Row.html" title="class in org.apache.beam.sdk.values"><code>Row</code></a>
containing the specified extracted fields. The returned transform contains further builder
methods to control how the grouping is done.</div>
</li>
</ul>
<a name="byFieldAccessDescriptor-org.apache.beam.sdk.schemas.FieldAccessDescriptor-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>byFieldAccessDescriptor</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms">Group.ByFields</a>&lt;T&gt;&nbsp;byFieldAccessDescriptor(<a href="../../../../../../org/apache/beam/sdk/schemas/FieldAccessDescriptor.html" title="class in org.apache.beam.sdk.schemas">FieldAccessDescriptor</a>&nbsp;fieldAccess)</pre>
<div class="block">Returns a transform that groups all elements in the input <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> keyed by the
fields specified. The output of this transform will be a <a href="../../../../../../org/apache/beam/sdk/values/KV.html" title="class in org.apache.beam.sdk.values"><code>KV</code></a> keyed by a <a href="../../../../../../org/apache/beam/sdk/values/Row.html" title="class in org.apache.beam.sdk.values"><code>Row</code></a>
containing the specified extracted fields. The returned transform contains further builder
methods to control how the grouping is done.</div>
</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/schemas/transforms/Filter.Inner.html" title="class in org.apache.beam.sdk.schemas.transforms"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/beam/sdk/schemas/transforms/Group.ByFields.html" title="class in org.apache.beam.sdk.schemas.transforms"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/beam/sdk/schemas/transforms/Group.html" target="_top">Frames</a></li>
<li><a href="Group.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><a href="#nested.class.summary">Nested</a>&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>