blob: e109e78499d770ffcd74509447cc60060e4106fc [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_181-google-v7) on Mon Jan 27 16:42:30 PST 2020 -->
<title>View (Apache Beam 2.20.0-SNAPSHOT)</title>
<meta name="date" content="2020-01-27">
<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="View (Apache Beam 2.20.0-SNAPSHOT)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":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/transforms/Values.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/View.AsIterable.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/View.html" target="_top">Frames</a></li>
<li><a href="View.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>Constr&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>Constr&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 View" class="title">Class View</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.transforms.View</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">View</span>
extends java.lang.Object</pre>
<div class="block">Transforms for creating <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionViews</code></a> from <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollections</code></a> (to read them as side inputs).
<p>While a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;ElemT&gt;</code></a> has many values of type <code>ElemT</code> per
window, a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView&lt;ViewT&gt;</code></a> has a single value of type <code>ViewT</code> for each window. It can be thought of as a mapping from windows to values of type <code>ViewT</code>. The transforms here represent ways of converting the <code>ElemT</code> values in a window
into a <code>ViewT</code> for that window.
<p>When a <a href="../../../../../org/apache/beam/sdk/transforms/ParDo.html" title="class in org.apache.beam.sdk.transforms"><code>ParDo</code></a> tranform is processing a main input element in a window <code>w</code> and a
<a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> is read via <a href="../../../../../org/apache/beam/sdk/transforms/DoFn.ProcessContext.html#sideInput-org.apache.beam.sdk.values.PCollectionView-"><code>DoFn.ProcessContext.sideInput(org.apache.beam.sdk.values.PCollectionView&lt;T&gt;)</code></a>, the value of the view
for <code>w</code> is returned.
<p>The SDK supports viewing a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a>, per window, as a single value, a <code>List</code>,
an <code>Iterable</code>, a <code>Map</code>, or a multimap (iterable-valued <code>Map</code>).
<p>For a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> that contains a single value of type <code>T</code> per window, such as
the output of <a href="../../../../../org/apache/beam/sdk/transforms/Combine.html#globally-org.apache.beam.sdk.transforms.SerializableFunction-"><code>Combine.globally(org.apache.beam.sdk.transforms.SerializableFunction&lt;java.lang.Iterable&lt;V&gt;, V&gt;)</code></a>, use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asSingleton--"><code>asSingleton()</code></a> to prepare it for use as a
side input:
<pre><code>
PCollectionView&lt;T&gt; output = someOtherPCollection
.apply(Combine.globally(...))
.apply(View.&lt;T&gt;asSingleton());
</code></pre>
<p>For a small <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> with windows that can fit entirely in memory, use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asList--"><code>asList()</code></a> to prepare it for use as a <code>List</code>. When read as a side input, the entire
list for a window will be cached in memory.
<pre><code>
PCollectionView&lt;List&lt;T&gt;&gt; output =
smallPCollection.apply(View.&lt;T&gt;asList());
</code></pre>
<p>If a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of <code>KV&lt;K, V&gt;</code> is known to have a single value per window for
each key, then use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMap--"><code>asMap()</code></a> to view it as a <code>Map&lt;K, V&gt;</code>:
<pre><code>
PCollectionView&lt;Map&lt;K, V&gt; output =
somePCollection.apply(View.&lt;K, V&gt;asMap());
</code></pre>
<p>Otherwise, to access a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of <code>KV&lt;K, V&gt;</code> as a <code>Map&lt;K,
Iterable&lt;V&gt;&gt;</code> side input, use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMultimap--"><code>asMultimap()</code></a>:
<pre><code>
PCollectionView&lt;Map&lt;K, Iterable&lt;V&gt;&gt; output =
somePCollection.apply(View.&lt;K, Iterable&lt;V&gt;&gt;asMultimap());
</code></pre>
<p>To iterate over an entire window of a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> via side input, use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asIterable--"><code>asIterable()</code></a>:
<pre><code>
PCollectionView&lt;Iterable&lt;T&gt;&gt; output =
somePCollection.apply(View.&lt;T&gt;asIterable());
</code></pre>
<p>Both <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMultimap--"><code>asMultimap()</code></a> and <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMap--"><code>asMap()</code></a> are useful for implementing lookup
based "joins" with the main input, when the side input is small enough to fit into memory.
<p>For example, if you represent a page on a website via some <code>Page</code> object and have some
type <code>UrlVisits</code> logging that a URL was visited, you could convert these to more fully
structured <code>PageVisit</code> objects using a side input, something like the following:
<pre><code>
PCollection&lt;Page&gt; pages = ... // pages fit into memory
PCollection&lt;UrlVisit&gt; urlVisits = ... // very large collection
final PCollectionView&lt;Map&lt;URL, Page&gt;&gt; urlToPageView = pages
.apply(WithKeys.of( ... )) // extract the URL from the page
.apply(View.&lt;URL, Page&gt;asMap());
PCollection&lt;PageVisit&gt; pageVisits = urlVisits
.apply(ParDo.withSideInputs(urlToPageView)
.of(new DoFn&lt;UrlVisit, PageVisit&gt;() </code>{
<code> @Override
void processElement(ProcessContext context) {
UrlVisit urlVisit = context.element();
Map&lt;URL, Page&gt; urlToPage = context.sideInput(urlToPageView);
Page page = urlToPage.get(urlVisit.getUrl());
c.output(new PageVisit(page, urlVisit.getVisitData()));
}
</code>}));
</pre>
<p>See <a href="../../../../../org/apache/beam/sdk/transforms/ParDo.SingleOutput.html#withSideInputs-org.apache.beam.sdk.values.PCollectionView...-"><code>ParDo.SingleOutput.withSideInputs(org.apache.beam.sdk.values.PCollectionView&lt;?&gt;...)</code></a> for details on how to access this variable
inside a <a href="../../../../../org/apache/beam/sdk/transforms/ParDo.html" title="class in org.apache.beam.sdk.transforms"><code>ParDo</code></a> over another <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a>.</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/transforms/View.AsIterable.html" title="class in org.apache.beam.sdk.transforms">View.AsIterable</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsIterable.html" title="type parameter in View.AsIterable">T</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></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/transforms/View.AsList.html" title="class in org.apache.beam.sdk.transforms">View.AsList</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsList.html" title="type parameter in View.AsList">T</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></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/transforms/View.AsMap.html" title="class in org.apache.beam.sdk.transforms">View.AsMap</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="type parameter in View.AsMap">K</a>,<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="type parameter in View.AsMap">V</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></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/transforms/View.AsMultimap.html" title="class in org.apache.beam.sdk.transforms">View.AsMultimap</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="type parameter in View.AsMultimap">K</a>,<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="type parameter in View.AsMultimap">V</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></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/transforms/View.AsSingleton.html" title="class in org.apache.beam.sdk.transforms">View.AsSingleton</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsSingleton.html" title="type parameter in View.AsSingleton">T</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></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/transforms/View.CreatePCollectionView.html" title="class in org.apache.beam.sdk.transforms">View.CreatePCollectionView</a>&lt;<a href="../../../../../org/apache/beam/sdk/transforms/View.CreatePCollectionView.html" title="type parameter in View.CreatePCollectionView">ElemT</a>,<a href="../../../../../org/apache/beam/sdk/transforms/View.CreatePCollectionView.html" title="type parameter in View.CreatePCollectionView">ViewT</a>&gt;</span></code>
<div class="block"><b><i>For internal use only; no backwards-compatibility guarantees.</i></b></div>
</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/transforms/View.AsIterable.html" title="class in org.apache.beam.sdk.transforms">View.AsIterable</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/View.html#asIterable--">asIterable</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsIterable.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsIterable</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> as input and
produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to an <code>Iterable</code> of the values in
that window.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsList.html" title="class in org.apache.beam.sdk.transforms">View.AsList</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/View.html#asList--">asList</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsList.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsList</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> and returns a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to a <code>List</code> containing all of the elements in the
window.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static &lt;K,V&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="class in org.apache.beam.sdk.transforms">View.AsMap</a>&lt;K,V&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMap--">asMap</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsMap</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;KV&lt;K,
V&gt;&gt;</code></a> as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to a <code>Map&lt;K, V&gt;</code>.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static &lt;K,V&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="class in org.apache.beam.sdk.transforms">View.AsMultimap</a>&lt;K,V&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMultimap--">asMultimap</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsMultimap</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;KV&lt;K, V&gt;&gt;</code></a> as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each
window to its contents as a <code>Map&lt;K, Iterable&lt;V&gt;&gt;</code> for use as a side
input.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsSingleton.html" title="class in org.apache.beam.sdk.transforms">View.AsSingleton</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/transforms/View.html#asSingleton--">asSingleton</a></span>()</code>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsSingleton.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsSingleton</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> with a single value
per window as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> that returns the value in the main
input window when read as a side input.</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">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="asSingleton--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>asSingleton</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsSingleton.html" title="class in org.apache.beam.sdk.transforms">View.AsSingleton</a>&lt;T&gt;&nbsp;asSingleton()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsSingleton.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsSingleton</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> with a single value
per window as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> that returns the value in the main
input window when read as a side input.
<pre><code>
PCollection&lt;InputT&gt; input = ...
CombineFn&lt;InputT, OutputT&gt; yourCombineFn = ...
PCollectionView&lt;OutputT&gt; output = input
.apply(Combine.globally(yourCombineFn))
.apply(View.&lt;OutputT&gt;asSingleton());
</code></pre>
<p>If the input <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> is empty, throws <code>NoSuchElementException</code>
in the consuming <a href="../../../../../org/apache/beam/sdk/transforms/DoFn.html" title="class in org.apache.beam.sdk.transforms"><code>DoFn</code></a>.
<p>If the input <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> contains more than one element, throws <code>IllegalArgumentException</code> in the consuming <a href="../../../../../org/apache/beam/sdk/transforms/DoFn.html" title="class in org.apache.beam.sdk.transforms"><code>DoFn</code></a>.</div>
</li>
</ul>
<a name="asList--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>asList</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsList.html" title="class in org.apache.beam.sdk.transforms">View.AsList</a>&lt;T&gt;&nbsp;asList()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsList.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsList</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> and returns a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to a <code>List</code> containing all of the elements in the
window.
<p>Unlike with <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asIterable--"><code>asIterable()</code></a>, the resulting list is required to fit in memory.</div>
</li>
</ul>
<a name="asIterable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>asIterable</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsIterable.html" title="class in org.apache.beam.sdk.transforms">View.AsIterable</a>&lt;T&gt;&nbsp;asIterable()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsIterable.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsIterable</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> as input and
produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to an <code>Iterable</code> of the values in
that window.
<p>The values of the <code>Iterable</code> for a window are not required to fit in memory, but they
may also not be effectively cached. If it is known that every window fits in memory, and
stronger caching is desired, use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asList--"><code>asList()</code></a>.</div>
</li>
</ul>
<a name="asMap--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>asMap</h4>
<pre>public static&nbsp;&lt;K,V&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="class in org.apache.beam.sdk.transforms">View.AsMap</a>&lt;K,V&gt;&nbsp;asMap()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsMap.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsMap</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;KV&lt;K,
V&gt;&gt;</code></a> as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each window to a <code>Map&lt;K, V&gt;</code>. It is required that each key of the input be associated with a single value,
per window. If this is not the case, precede this view with <code>Combine.perKey</code>, as in the
example below, or alternatively use <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMultimap--"><code>asMultimap()</code></a>.
<pre><code>
PCollection&lt;KV&lt;K, V&gt;&gt; input = ...
CombineFn&lt;V, OutputT&gt; yourCombineFn = ...
PCollectionView&lt;Map&lt;K, OutputT&gt;&gt; output = input
.apply(Combine.perKey(yourCombineFn))
.apply(View.&lt;K, OutputT&gt;asMap());
</code></pre>
<p>Currently, the resulting map is required to fit into memory.</div>
</li>
</ul>
<a name="asMultimap--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>asMultimap</h4>
<pre>public static&nbsp;&lt;K,V&gt;&nbsp;<a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="class in org.apache.beam.sdk.transforms">View.AsMultimap</a>&lt;K,V&gt;&nbsp;asMultimap()</pre>
<div class="block">Returns a <a href="../../../../../org/apache/beam/sdk/transforms/View.AsMultimap.html" title="class in org.apache.beam.sdk.transforms"><code>View.AsMultimap</code></a> transform that takes a <a href="../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;KV&lt;K, V&gt;&gt;</code></a> as input and produces a <a href="../../../../../org/apache/beam/sdk/values/PCollectionView.html" title="interface in org.apache.beam.sdk.values"><code>PCollectionView</code></a> mapping each
window to its contents as a <code>Map&lt;K, Iterable&lt;V&gt;&gt;</code> for use as a side
input. In contrast to <a href="../../../../../org/apache/beam/sdk/transforms/View.html#asMap--"><code>asMap()</code></a>, it is not required that the keys in the input
collection be unique.
<pre><code>
PCollection&lt;KV&lt;K, V&gt;&gt; input = ... // maybe more than one occurrence of a some keys
PCollectionView&lt;Map&lt;K, Iterable&lt;V&gt;&gt;&gt; output = input.apply(View.&lt;K, V&gt;asMultimap());
</code></pre></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/transforms/Values.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/View.AsIterable.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/View.html" target="_top">Frames</a></li>
<li><a href="View.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>Constr&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>Constr&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>