You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by gi...@apache.org on 2022/12/06 22:26:54 UTC

[beam] branch asf-site updated: Publishing website 2022/12/06 22:26:46 at commit 0351291

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 7b92ed4905b Publishing website 2022/12/06 22:26:46 at commit 0351291
7b92ed4905b is described below

commit 7b92ed4905b2a2eaf712ab46357ecf5ef35b2ea0
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Dec 6 22:26:47 2022 +0000

    Publishing website 2022/12/06 22:26:46 at commit 0351291
---
 .../documentation/basics/index.html                |   2 +-
 .../documentation/glossary/index.html              |   2 +-
 website/generated-content/documentation/index.html |   2 +-
 website/generated-content/documentation/index.xml  | 524 +++++++++++++++++----
 .../documentation/io/built-in/cdap/index.html      | 175 +++++++
 .../io/built-in/google-bigquery/index.html         |   2 +-
 .../documentation/io/built-in/hadoop/index.html    |   2 +-
 .../documentation/io/built-in/hcatalog/index.html  |   2 +-
 .../documentation/io/built-in/parquet/index.html   |   2 +-
 .../documentation/io/built-in/snowflake/index.html |   2 +-
 .../io/built-in/sparkreceiver/index.html           |  48 ++
 .../documentation/io/connectors/index.html         |   8 +-
 .../documentation/io/developing-io-java/index.html |   2 +-
 .../io/developing-io-overview/index.html           |   2 +-
 .../io/developing-io-python/index.html             |   2 +-
 .../documentation/io/testing/index.html            |   2 +-
 .../documentation/ml/anomaly-detection/index.html  |   2 +-
 .../documentation/ml/data-processing/index.html    |   2 +-
 .../ml/large-language-modeling/index.html          |   2 +-
 .../ml/multi-model-pipelines/index.html            |   2 +-
 .../documentation/ml/online-clustering/index.html  |   2 +-
 .../documentation/ml/orchestration/index.html      |   2 +-
 .../documentation/ml/overview/index.html           |   2 +-
 .../ml/runinference-metrics/index.html             |   2 +-
 .../documentation/patterns/ai-platform/index.html  |   2 +-
 .../documentation/patterns/bigqueryio/index.html   |   2 +-
 .../documentation/patterns/bqml/index.html         |   2 +-
 .../documentation/patterns/custom-io/index.html    |   2 +-
 .../patterns/custom-windows/index.html             |   2 +-
 .../patterns/file-processing/index.html            |   2 +-
 .../index.html                                     |   2 +-
 .../documentation/patterns/overview/index.html     |   2 +-
 .../patterns/pipeline-options/index.html           |   2 +-
 .../documentation/patterns/schema/index.html       |   2 +-
 .../documentation/patterns/side-inputs/index.html  |   2 +-
 .../pipelines/create-your-pipeline/index.html      |   2 +-
 .../pipelines/design-your-pipeline/index.html      |   2 +-
 .../pipelines/test-your-pipeline/index.html        |   2 +-
 .../documentation/programming-guide/index.html     |   2 +-
 .../documentation/runners/jstorm/index.html        |   2 +-
 .../documentation/runtime/environments/index.html  |   2 +-
 .../documentation/runtime/model/index.html         |   2 +-
 .../runtime/resource-hints/index.html              |   2 +-
 .../runtime/sdk-harness-config/index.html          |   2 +-
 .../aggregation/approximatequantiles/index.html    |   2 +-
 .../java/aggregation/approximateunique/index.html  |   2 +-
 .../java/aggregation/cogroupbykey/index.html       |   2 +-
 .../transforms/java/aggregation/combine/index.html |   2 +-
 .../java/aggregation/combinewithcontext/index.html |   2 +-
 .../transforms/java/aggregation/count/index.html   |   2 +-
 .../java/aggregation/distinct/index.html           |   2 +-
 .../java/aggregation/groupbykey/index.html         |   2 +-
 .../java/aggregation/groupintobatches/index.html   |   2 +-
 .../java/aggregation/hllcount/index.html           |   2 +-
 .../transforms/java/aggregation/latest/index.html  |   2 +-
 .../transforms/java/aggregation/max/index.html     |   2 +-
 .../transforms/java/aggregation/mean/index.html    |   2 +-
 .../transforms/java/aggregation/min/index.html     |   2 +-
 .../transforms/java/aggregation/sample/index.html  |   2 +-
 .../transforms/java/aggregation/sum/index.html     |   2 +-
 .../transforms/java/aggregation/top/index.html     |   2 +-
 .../transforms/java/elementwise/filter/index.html  |   2 +-
 .../java/elementwise/flatmapelements/index.html    |   2 +-
 .../transforms/java/elementwise/keys/index.html    |   2 +-
 .../transforms/java/elementwise/kvswap/index.html  |   2 +-
 .../java/elementwise/mapelements/index.html        |   2 +-
 .../transforms/java/elementwise/pardo/index.html   |   2 +-
 .../java/elementwise/partition/index.html          |   2 +-
 .../transforms/java/elementwise/regex/index.html   |   2 +-
 .../transforms/java/elementwise/reify/index.html   |   2 +-
 .../java/elementwise/tostring/index.html           |   2 +-
 .../transforms/java/elementwise/values/index.html  |   2 +-
 .../java/elementwise/withkeys/index.html           |   2 +-
 .../java/elementwise/withtimestamps/index.html     |   2 +-
 .../transforms/java/other/create/index.html        |   2 +-
 .../transforms/java/other/flatten/index.html       |   2 +-
 .../transforms/java/other/passert/index.html       |   2 +-
 .../transforms/java/other/view/index.html          |   2 +-
 .../transforms/java/other/window/index.html        |   2 +-
 .../transforms/java/overview/index.html            |   2 +-
 .../aggregation/approximatequantiles/index.html    |   2 +-
 .../aggregation/approximateunique/index.html       |   2 +-
 .../python/aggregation/cogroupbykey/index.html     |   2 +-
 .../python/aggregation/combineglobally/index.html  |   2 +-
 .../python/aggregation/combineperkey/index.html    |   2 +-
 .../python/aggregation/combinevalues/index.html    |   2 +-
 .../aggregation/combinewithcontext/index.html      |   2 +-
 .../transforms/python/aggregation/count/index.html |   2 +-
 .../python/aggregation/distinct/index.html         |   2 +-
 .../python/aggregation/groupby/index.html          |   2 +-
 .../python/aggregation/groupbykey/index.html       |   2 +-
 .../python/aggregation/groupintobatches/index.html |   2 +-
 .../python/aggregation/latest/index.html           |   2 +-
 .../transforms/python/aggregation/max/index.html   |   2 +-
 .../transforms/python/aggregation/mean/index.html  |   2 +-
 .../transforms/python/aggregation/min/index.html   |   2 +-
 .../python/aggregation/sample/index.html           |   2 +-
 .../transforms/python/aggregation/sum/index.html   |   2 +-
 .../transforms/python/aggregation/top/index.html   |   2 +-
 .../python/elementwise/filter/index.html           |   2 +-
 .../python/elementwise/flatmap/index.html          |   2 +-
 .../transforms/python/elementwise/keys/index.html  |   2 +-
 .../python/elementwise/kvswap/index.html           |   2 +-
 .../transforms/python/elementwise/map/index.html   |   2 +-
 .../transforms/python/elementwise/pardo/index.html |   2 +-
 .../python/elementwise/partition/index.html        |   2 +-
 .../transforms/python/elementwise/regex/index.html |   2 +-
 .../transforms/python/elementwise/reify/index.html |   2 +-
 .../python/elementwise/runinference/index.html     |   2 +-
 .../python/elementwise/tostring/index.html         |   2 +-
 .../python/elementwise/values/index.html           |   2 +-
 .../python/elementwise/withkeys/index.html         |   2 +-
 .../python/elementwise/withtimestamps/index.html   |   2 +-
 .../transforms/python/other/create/index.html      |   2 +-
 .../transforms/python/other/flatten/index.html     |   2 +-
 .../transforms/python/other/passert/index.html     |   2 +-
 .../transforms/python/other/reshuffle/index.html   |   2 +-
 .../transforms/python/other/view/index.html        |   2 +-
 .../transforms/python/other/windowinto/index.html  |   2 +-
 .../transforms/python/overview/index.html          |   2 +-
 website/generated-content/sitemap.xml              |   2 +-
 121 files changed, 769 insertions(+), 220 deletions(-)

diff --git a/website/generated-content/documentation/basics/index.html b/website/generated-content/documentation/basics/index.html
index 6eb41d1e7f7..f59ece52f7d 100644
--- a/website/generated-content/documentation/basics/index.html
+++ b/website/generated-content/documentation/basics/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 data-parallel processing pipelines. To get started with Beam, you&rsquo;ll need to
 understand an important set of core concepts:</p><ul><li><a href=#pipeline><em>Pipeline</em></a> - A pipeline is a user-constructed graph of
 transformations that defines the desired data processing operations.</li><li><a href=#pcollection><em>PCollection</em></a> - A <code>PCollection</code> is a data set or data
diff --git a/website/generated-content/documentation/glossary/index.html b/website/generated-content/documentation/glossary/index.html
index 5bfe8600da7..ddba9428119 100644
--- a/website/generated-content/documentation/glossary/index.html
+++ b/website/generated-content/documentation/glossary/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/index.html b/website/generated-content/documentation/index.html
index 3f1cdd4b4da..e2749605362 100644
--- a/website/generated-content/documentation/index.html
+++ b/website/generated-content/documentation/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 the Beam programming model, SDKs, and runners.</p><h2 id=concepts>Concepts</h2><p>Learn about the Beam Programming Model and the concepts common to all Beam SDKs
 and Runners.</p><ul><li>Start with the <a href=/documentation/basics/>Basics of the Beam model</a> for
 introductory conceptual information.</li><li>Read the <a href=/documentation/programming-guide/>Programming Guide</a>, which
diff --git a/website/generated-content/documentation/index.xml b/website/generated-content/documentation/index.xml
index 50e9b3aaf4c..a868391bb3d 100644
--- a/website/generated-content/documentation/index.xml
+++ b/website/generated-content/documentation/index.xml
@@ -14204,7 +14204,429 @@ If you also set the &lt;code>withExtendedErrorInfo&lt;/code> property , you will
 &lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;PrintErrors&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span>
 &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">FlatMap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">lambda&lt;/span> &lt;span class="n">err&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Error Found {}&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">err&lt;/span>&lt;span cl [...]
 &lt;/div>
-&lt;/div></description></item><item><title>Documentation: CoGroupByKey</title><link>/documentation/transforms/java/aggregation/cogroupbykey/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/documentation/transforms/java/aggregation/cogroupbykey/</guid><description>
+&lt;/div></description></item><item><title>Documentation: Cdap IO</title><link>/documentation/io/built-in/cdap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/documentation/io/built-in/cdap/</guid><description>
+&lt;!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+&lt;h1 id="cdap-io">Cdap IO&lt;/h1>
+&lt;p>A &lt;code>CdapIO&lt;/code> is a transform for reading data from source or writing data to sink CDAP plugin.&lt;/p>
+&lt;h2 id="batch-plugins-support">Batch plugins support&lt;/h2>
+&lt;p>&lt;code>CdapIO&lt;/code> currently supports the following CDAP Batch plugins by referencing &lt;code>CDAP plugin&lt;/code> class name:&lt;/p>
+&lt;ul>
+&lt;li>&lt;a href="https://github.com/data-integrations/hubspot/blob/develop/src/main/java/io/cdap/plugin/hubspot/source/batch/HubspotBatchSource.java">Hubspot Batch Source&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://github.com/data-integrations/hubspot/blob/develop/src/main/java/io/cdap/plugin/hubspot/sink/batch/HubspotBatchSink.java">Hubspot Batch Sink&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://github.com/data-integrations/salesforce/blob/develop/src/main/java/io/cdap/plugin/salesforce/plugin/source/batch/SalesforceBatchSource.java">Salesforce Batch Source&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://github.com/data-integrations/salesforce/blob/develop/src/main/java/io/cdap/plugin/salesforce/plugin/sink/batch/SalesforceBatchSink.java">Salesforce Batch Sink&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://github.com/data-integrations/servicenow-plugins/blob/develop/src/main/java/io/cdap/plugin/servicenow/source/ServiceNowSource.java">ServiceNow Batch Source&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://github.com/data-integrations/zendesk/blob/develop/src/main/java/io/cdap/plugin/zendesk/source/batch/ZendeskBatchSource.java">Zendesk Batch Source&lt;/a>&lt;/li>
+&lt;/ul>
+&lt;p>Also, any other CDAP Batch plugin based on Hadoop&amp;rsquo;s &lt;code>InputFormat&lt;/code> or &lt;code>OutputFormat&lt;/code> can be used. They can be easily added to the list of supported by class name plugins, for more details please see &lt;a href="https://github.com/apache/beam/blob/master/sdks/java/io/cdap/README.md">CdapIO readme&lt;/a>.&lt;/p>
+&lt;h2 id="streaming-plugins-support">Streaming plugins support&lt;/h2>
+&lt;p>&lt;code>CdapIO&lt;/code> currently supports CDAP Streaming plugins based on &lt;a href="https://spark.apache.org/docs/2.4.0/streaming-custom-receivers.html">Apache Spark Receiver&lt;/a>.&lt;/p>
+&lt;p>Requirements for CDAP Streaming plugins:&lt;/p>
+&lt;ul>
+&lt;li>CDAP Streaming plugin should be based on &lt;code>Spark Receiver&lt;/code> (Spark 2.4).&lt;/li>
+&lt;li>CDAP Streaming plugin should support work with offsets.&lt;/li>
+&lt;li>Corresponding Spark Receiver should implement &lt;a href="https://github.com/apache/beam/blob/master/sdks/java/io/sparkreceiver/src/main/java/org/apache/beam/sdk/io/sparkreceiver/HasOffset.java">HasOffset&lt;/a> interface.&lt;/li>
+&lt;li>Records should have the numeric field that represents record offset.&lt;/li>
+&lt;/ul>
+&lt;h2 id="batch-reading-using-cdapio">Batch reading using CdapIO&lt;/h2>
+&lt;p>In order to read from CDAP plugin you will need to pass:&lt;/p>
+&lt;ul>
+&lt;li>&lt;code>Key&lt;/code> and &lt;code>Value&lt;/code> classes. You will need to check if these classes have a Beam Coder available.&lt;/li>
+&lt;li>&lt;code>PluginConfig&lt;/code> object with parameters for certain CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>You can easily build &lt;code>PluginConfig&lt;/code> object using &lt;code>ConfigWrapper&lt;/code> class by specifying:&lt;/p>
+&lt;ul>
+&lt;li>Class of the needed &lt;code>PluginConfig&lt;/code>.&lt;/li>
+&lt;li>&lt;code>Map&amp;lt;String, Object&amp;gt;&lt;/code> parameters map for corresponding CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">Map&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Object&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">myPluginConfigParams&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">HashMap&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;() [...]
+&lt;span class="c1">// Read plugin parameters (e.g. from PipelineOptions) and put them into &amp;#39;myPluginConfigParams&amp;#39; map.
+&lt;/span>&lt;span class="c1">&lt;/span>&lt;span class="n">myPluginConfigParams&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">put&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">MyPluginConstants&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">USERNAME_PARAMETER_NAME&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">pipelineOptions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getUsername&lt;/span>&lt;span class="o">());&lt;/span>
+&lt;span class="c1">// ...
+&lt;/span>&lt;span class="c1">&lt;/span>&lt;span class="n">MyPluginConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">MyPluginConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">myPluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>&lt;/code>&lt;/ [...]
+&lt;/div>
+&lt;/div>
+&lt;h3 id="read-data-by-plugin-class-name">Read data by plugin class name&lt;/h3>
+&lt;p>Some CDAP plugins are already supported and can be used just by plugin class name.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">JsonElement&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">JsonElement&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">HubspotBatchSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">JsonElement&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;read&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="read-data-with-building-batch-plugin">Read data with building Batch Plugin&lt;/h3>
+&lt;p>If CDAP plugin is not supported by plugin class name, you can easily build &lt;code>Plugin&lt;/code> object by passing the following parameters:&lt;/p>
+&lt;ul>
+&lt;li>Class of CDAP Batch plugin.&lt;/li>
+&lt;li>The &lt;code>InputFormat&lt;/code> class used to connect to your CDAP plugin of choice.&lt;/li>
+&lt;li>The &lt;code>InputFormatProvider&lt;/code> class used to provide &lt;code>InputFormat&lt;/code>.&lt;/li>
+&lt;/ul>
+&lt;p>Then you will be able to pass this &lt;code>Plugin&lt;/code> object to &lt;code>CdapIO&lt;/code>.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPlugin&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Plugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">createBatch&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">MyCdapPlugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">MyInputFormat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">MyInputFormatProvider&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">))&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;read&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="examples-for-specific-cdap-plugins">Examples for specific CDAP plugins&lt;/h3>
+&lt;h4 id="cdap-hubspot-batch-source-plugin">CDAP Hubspot Batch Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">SourceHubspotConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">SourceHubspotConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">JsonElement&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">JsonElement&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">HubspotBatchSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">JsonElement&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromHubspotPlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h4 id="cdap-salesforce-batch-source-plugin">CDAP Salesforce Batch Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">SalesforceSourceConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">SalesforceSourceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Schema&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">LinkedHashMap&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">Schema&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">LinkedHashMap&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">SalesforceBatchSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">Schema&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">LinkedHashMap&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromSalesforcePlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h4 id="cdap-servicenow-batch-source-plugin">CDAP ServiceNow Batch Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">ServiceNowSourceConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">ServiceNowSourceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ServiceNowSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromServiceNowPlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h4 id="cdap-zendesk-batch-source-plugin">CDAP Zendesk Batch Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">ZendeskBatchSourceConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">ZendeskBatchSourceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ZendeskBatchSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">StructuredRecord&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromZendeskPlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;p>To learn more please check out &lt;a href="https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap">complete examples&lt;/a>.&lt;/p>
+&lt;h2 id="batch-writing-using-cdapio">Batch writing using CdapIO&lt;/h2>
+&lt;p>In order to write to CDAP plugin you will need to pass:&lt;/p>
+&lt;ul>
+&lt;li>&lt;code>Key&lt;/code> and &lt;code>Value&lt;/code> classes. You will need to check if these classes have a Beam Coder available.&lt;/li>
+&lt;li>&lt;code>locksDirPath&lt;/code>, which is locks directory path where locks will be stored. This parameter is needed for Hadoop External Synchronization (mechanism for acquiring locks related to the write job).&lt;/li>
+&lt;li>&lt;code>PluginConfig&lt;/code> object with parameters for certain CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>You can easily build &lt;code>PluginConfig&lt;/code> object using &lt;code>ConfigWrapper&lt;/code> class by specifying:&lt;/p>
+&lt;ul>
+&lt;li>Class of the needed &lt;code>PluginConfig&lt;/code>.&lt;/li>
+&lt;li>&lt;code>Map&amp;lt;String, Object&amp;gt;&lt;/code> parameters map for corresponding CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">MyPluginConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">MyPluginConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>&lt;/code>&lt;/pr [...]
+&lt;/div>
+&lt;/div>
+&lt;h3 id="write-data-by-plugin-class-name">Write data by plugin class name&lt;/h3>
+&lt;p>Some CDAP plugins are already supported and can be used just by plugin class name.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Write&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">HubspotBatchSink&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withLocksDirPath&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">locksDirPath&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;write&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">writeTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="write-data-with-building-batch-plugin">Write data with building Batch Plugin&lt;/h3>
+&lt;p>If CDAP plugin is not supported by plugin class name, you can easily build &lt;code>Plugin&lt;/code> object by passing the following parameters:&lt;/p>
+&lt;ul>
+&lt;li>Class of CDAP plugin.&lt;/li>
+&lt;li>The &lt;code>OutputFormat&lt;/code> class used to connect to your CDAP plugin of choice.&lt;/li>
+&lt;li>The &lt;code>OutputFormatProvider&lt;/code> class used to provide &lt;code>OutputFormat&lt;/code>.&lt;/li>
+&lt;/ul>
+&lt;p>Then you will be able to pass this &lt;code>Plugin&lt;/code> object to &lt;code>CdapIO&lt;/code>.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Write&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">writeTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPlugin&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Plugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">createBatch&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">MyCdapPlugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">MyOutputFormat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">MyOutputFormatProvider&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">))&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withLocksDirPath&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">locksDirPath&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;write&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">writeTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="examples-for-specific-cdap-plugins-1">Examples for specific CDAP plugins&lt;/h3>
+&lt;h4 id="cdap-hubspot-batch-sink-plugin">CDAP Hubspot Batch Sink plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">SinkHubspotConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">SinkHubspotConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">writeTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginClass&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withLocksDirPath&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">locksDirPath&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;writeToHubspotPlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">writeTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h4 id="cdap-salesforce-batch-sink-plugin">CDAP Salesforce Batch Sink plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">SalesforceSinkConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">SalesforceSinkConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">CSVRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">writeTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">CSVRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginClass&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">CSVRecord&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withLocksDirPath&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">locksDirPath&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;writeToSalesforcePlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">writeTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;p>To learn more please check out &lt;a href="https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap">complete examples&lt;/a>.&lt;/p>
+&lt;h2 id="streaming-reading-using-cdapio">Streaming reading using CdapIO&lt;/h2>
+&lt;p>In order to read from CDAP plugin you will need to pass:&lt;/p>
+&lt;ul>
+&lt;li>&lt;code>Key&lt;/code> and &lt;code>Value&lt;/code> classes. You will need to check if these classes have a Beam Coder available.&lt;/li>
+&lt;li>&lt;code>PluginConfig&lt;/code> object with parameters for certain CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>You can easily build &lt;code>PluginConfig&lt;/code> object using &lt;code>ConfigWrapper&lt;/code> class by specifying:&lt;/p>
+&lt;ul>
+&lt;li>Class of the needed &lt;code>PluginConfig&lt;/code>.&lt;/li>
+&lt;li>&lt;code>Map&amp;lt;String, Object&amp;gt;&lt;/code> parameters map for corresponding CDAP plugin.&lt;/li>
+&lt;/ul>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">MyPluginConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">MyPluginConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>&lt;/code>&lt;/pr [...]
+&lt;/div>
+&lt;/div>
+&lt;h3 id="read-data-by-plugin-class-name-1">Read data by plugin class name&lt;/h3>
+&lt;p>Some CDAP plugins are already supported and can be used just by plugin class name.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">MyStreamingPlugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;read&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="read-data-with-building-streaming-plugin">Read data with building Streaming Plugin&lt;/h3>
+&lt;p>If CDAP plugin is not supported by plugin class name, you can easily build &lt;code>Plugin&lt;/code> object by passing the following parameters:&lt;/p>
+&lt;ul>
+&lt;li>Class of CDAP Streaming plugin.&lt;/li>
+&lt;li>&lt;code>getOffsetFn&lt;/code>, which is &lt;code>SerializableFunction&lt;/code> that defines how to get &lt;code>Long&lt;/code> record offset from a record.&lt;/li>
+&lt;li>&lt;code>receiverClass&lt;/code>, which is Spark (v 2.4) &lt;code>Receiver&lt;/code> class associated with CDAP plugin.&lt;/li>
+&lt;li>(Optionally) &lt;code>getReceiverArgsFromConfigFn&lt;/code>, which is &lt;code>SerializableFunction&lt;/code> that defines how to get constructor arguments for Spark &lt;code>Receiver&lt;/code> using &lt;code>PluginConfig&lt;/code> object.&lt;/li>
+&lt;/ul>
+&lt;p>Then you will be able to pass this &lt;code>Plugin&lt;/code> object to &lt;code>CdapIO&lt;/code>.&lt;/p>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPlugin&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Plugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">createStreaming&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">MyStreamingPlugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">myGetOffsetFn&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">MyReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">myGetReceiverArgsFromConfigFn&lt;/span>&lt;span class="o">))&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;read&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="read-data-with-optional-parameters">Read data with optional parameters&lt;/h3>
+&lt;p>Optionally you can pass the following optional parameters:&lt;/p>
+&lt;ul>
+&lt;li>&lt;code>pullFrequencySec&lt;/code>, which is delay in seconds between polling for new records updates.&lt;/li>
+&lt;li>&lt;code>startOffset&lt;/code>, which is inclusive start offset from which the reading should be started.&lt;/li>
+&lt;/ul>
+&lt;p>For example:&lt;/p>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPluginClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">MyStreamingPlugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPullFrequencySec&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">1L&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withStartOffset&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">1L&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;read&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h3 id="examples-for-specific-cdap-plugins-2">Examples for specific CDAP plugins&lt;/h3>
+&lt;h4 id="cdap-hubspot-streaming-source-plugin">CDAP Hubspot Streaming Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">HubspotStreamingSourceConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">HubspotStreamingSourceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPlugin&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Plugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">createStreaming&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">HubspotStreamingSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">GetOffsetUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getOffsetFnForHubspot&lt;/span>&lt;span class="o">(),&lt;/span>
+&lt;span class="n">HubspotReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">))&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromHubspotPlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;h4 id="cdap-salesforce-streaming-source-plugin">CDAP Salesforce Streaming Source plugin&lt;/h4>
+&lt;div class='language-java snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="n">SalesforceStreamingSourceConfig&lt;/span> &lt;span class="n">pluginConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="k">new&lt;/span> &lt;span class="n">ConfigWrapper&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;(&lt;/span>&lt;span class="n">SalesforceStreamingSourceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withParams&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfigParams&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Read&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">readTransform&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">CdapIO&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withCdapPlugin&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Plugin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">createStreaming&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">SalesforceStreamingSource&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">GetOffsetUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getOffsetFnForSalesforce&lt;/span>&lt;span class="o">(),&lt;/span>
+&lt;span class="n">SalesforceReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">config&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">SalesforceStreamingSourceConfig&lt;/span> &lt;span class="n">salesforceConfig&lt;/span> &lt;span class="o">=&lt;/span>
+&lt;span class="n">SalesforceStreamingSourceConfig&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="n">config&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">Object&lt;/span>&lt;span class="o">[]&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">salesforceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getAuthenticatorCredentials&lt;/span>&lt;span class="o">(),&lt;/span>
+&lt;span class="n">salesforceConfig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getPushTopicName&lt;/span>&lt;span class="o">()&lt;/span>
+&lt;span class="o">};&lt;/span>
+&lt;span class="o">}))&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withPluginConfig&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">pluginConfig&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withKeyClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">NullWritable&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="o">.&lt;/span>&lt;span class="na">withValueClass&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;readFromSalesforcePlugin&amp;#34;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">readTransform&lt;/span>&lt;span class="o">);&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
+&lt;p>To learn more please check out &lt;a href="https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap">complete examples&lt;/a>.&lt;/p></description></item><item><title>Documentation: CoGroupByKey</title><link>/documentation/transforms/java/aggregation/cogroupbykey/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/documentation/transforms/java/aggregation/cogroupbykey/</guid><description>
 &lt;!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -19874,102 +20296,4 @@ to the output collection.&lt;/p>
 &lt;h2 id="related-transforms">Related transforms&lt;/h2>
 &lt;ul>
 &lt;li>&lt;a href="/documentation/transforms/java/aggregation/groupbykey">GroupByKey&lt;/a> takes one input collection.&lt;/li>
-&lt;/ul></description></item><item><title>Documentation: GroupIntoBatches</title><link>/documentation/transforms/python/aggregation/groupintobatches/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/documentation/transforms/python/aggregation/groupintobatches/</guid><description>
-&lt;!--
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-&lt;h1 id="groupintobatches">GroupIntoBatches&lt;/h1>
-&lt;script type="text/javascript">
-localStorage.setItem("language", "language-py")
-&lt;/script>
-&lt;table align="left" style="margin-right:1em">
-&lt;td>
-&lt;a
-class="button"
-target="_blank"
-href="https://beam.apache.org/releases/pydoc/current/apache_beam.transforms.util.html#apache_beam.transforms.util.GroupIntoBatches"
->&lt;img
-src="https://beam.apache.org/images/logos/sdks/python.png"
-width="32px"
-height="32px"
-alt="Pydoc"
-/>
-Pydoc&lt;/a
->
-&lt;/td>
-&lt;/table>
-&lt;p>&lt;br>&lt;br>&lt;br>&lt;/p>
-&lt;p>Batches the input into desired batch size.&lt;/p>
-&lt;h2 id="examples">Examples&lt;/h2>
-&lt;p>In the following example, we create a pipeline with a &lt;code>PCollection&lt;/code> of produce by season.&lt;/p>
-&lt;p>We use &lt;code>GroupIntoBatches&lt;/code> to get fixed-sized batches for every key, which outputs a list of elements for every key.&lt;/p>
-&lt;div class='language-py snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a target="_blank" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="View source code" href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/transforms/aggregation/groupintobatches.py">
-&lt;img src="/images/code-icon.svg"/>
-&lt;/a>
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="kn">import&lt;/span> &lt;span class="nn">apache_beam&lt;/span> &lt;span class="kn">as&lt;/span> &lt;span class="nn">beam&lt;/span>
-&lt;span class="k">with&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Pipeline&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">pipeline&lt;/span>&lt;span class="p">:&lt;/span>
-&lt;span class="n">batches_with_keys&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>
-&lt;span class="n">pipeline&lt;/span>
-&lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;Create produce&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Create&lt;/span>&lt;span class="p">([&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;spring&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍓&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;spring&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🥕&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;spring&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍆&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;spring&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍅&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;summer&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🥕&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;summer&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍅&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;summer&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🌽&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;fall&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🥕&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;fall&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍅&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;winter&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;🍆&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
-&lt;span class="p">])&lt;/span>
-&lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;Group into batches&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GroupIntoBatches&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="o">|&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Map&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">print&lt;/span>&lt;span class="p">))&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;p class="notebook-skip">Output:&lt;/p>
-&lt;div class="snippet">
-&lt;div class="notebook-skip code-snippet without_switcher">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;pre>&lt;code>(&amp;#39;spring&amp;#39;, [&amp;#39;🍓&amp;#39;, &amp;#39;🥕&amp;#39;, &amp;#39;🍆&amp;#39;])
-(&amp;#39;summer&amp;#39;, [&amp;#39;🥕&amp;#39;, &amp;#39;🍅&amp;#39;, &amp;#39;🌽&amp;#39;])
-(&amp;#39;spring&amp;#39;, [&amp;#39;🍅&amp;#39;])
-(&amp;#39;fall&amp;#39;, [&amp;#39;🥕&amp;#39;, &amp;#39;🍅&amp;#39;])
-(&amp;#39;winter&amp;#39;, [&amp;#39;🍆&amp;#39;])&lt;/code>&lt;/pre>
-&lt;/div>
-&lt;/div>
-&lt;h2 id="related-transforms">Related transforms&lt;/h2>
-&lt;!-- TODO(BEAM-10889): Create a page for BatchElements and link to it here. //-->
-&lt;p>For unkeyed data and dynamic batch sizes, one may want to use
-&lt;a href="https://beam.apache.org/releases/pydoc/current/apache_beam.transforms.util.html#apache_beam.transforms.util.BatchElements">BatchElements&lt;/a>.&lt;/p>
-&lt;table align="left" style="margin-right:1em">
-&lt;td>
-&lt;a
-class="button"
-target="_blank"
-href="https://beam.apache.org/releases/pydoc/current/apache_beam.transforms.util.html#apache_beam.transforms.util.GroupIntoBatches"
->&lt;img
-src="https://beam.apache.org/images/logos/sdks/python.png"
-width="32px"
-height="32px"
-alt="Pydoc"
-/>
-Pydoc&lt;/a
->
-&lt;/td>
-&lt;/table>
-&lt;p>&lt;br>&lt;br>&lt;br>&lt;/p></description></item></channel></rss>
\ No newline at end of file
+&lt;/ul></description></item></channel></rss>
\ No newline at end of file
diff --git a/website/generated-content/documentation/io/built-in/cdap/index.html b/website/generated-content/documentation/io/built-in/cdap/index.html
new file mode 100644
index 00000000000..9ec48e74310
--- /dev/null
+++ b/website/generated-content/documentation/io/built-in/cdap/index.html
@@ -0,0 +1,175 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Cdap IO</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
+<a class=navbar-link href=/get-started/>Get Started</a>
+<a class=navbar-link href=/documentation/>Documentation</a>
+<button type=button class="navbar-toggle menu-open" aria-expanded=false aria-controls=navbar onclick=openMenu()>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><button type=button class=navbar-toggle aria-expanded=false aria-controls=navbar id=closeMenu>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var cx='012923275103528129024:4emlchv9wzi';var gcse=document.createElement('script');gcse.type='text/javascript';gcse.async=true;gcse.src='https://cse.google.com/cse.js?cx='+cx;var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gcse,s);})();</script><gcse:search></gcse:search></div></li><li><a c [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
+<a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
+<span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="11" fill="none" viewBox="0 0 12 11"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.666 4.535 5.847 9.108 1.444 4.535"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link href=/documentation/>General</a></li><li><a class=navbar-dropdown-menu-link href=/documentation/sdks/java/>Languages</a></li><li><a class=navbar-dropdown-menu-link href=/documentati [...]
+<a class=navbar-link href=/community/>Community</a>
+<a class=navbar-link href=/contribute/>Contribute</a>
+<a class=navbar-link href=/blog/>Blog</a>
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zM21.191 21l-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
+function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
+function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
+function blockScroll(){$("body").toggleClass("fixedPosition");}
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+<span class=c1>// Read plugin parameters (e.g. from PipelineOptions) and put them into &#39;myPluginConfigParams&#39; map.
+</span><span class=c1></span><span class=n>myPluginConfigParams</span><span class=o>.</span><span class=na>put</span><span class=o>(</span><span class=n>MyPluginConstants</span><span class=o>.</span><span class=na>USERNAME_PARAMETER_NAME</span><span class=o>,</span> <span class=n>pipelineOptions</span><span class=o>.</span><span class=na>getUsername</span><span class=o>());</span>
+<span class=c1>// ...
+</span><span class=c1></span><span class=n>MyPluginConfig</span> <span class=n>pluginConfig</span> <span class=o>=</span>
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>MyPluginConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>myPluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span></code></pre></div></div></div><h3 id=read-data-by-plugin-class-name>Read data by plugin class name</h3><p>Some CDAP plugins  [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>JsonElement</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>HubspotBatchSource</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>JsonElement</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;read&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=read-data-with-building-batch-plugin>Read data with building Batch Plugin</h3><p>If CDAP plugin is not supported by plugin class name, you can easily build <code>Plugin</code> object by passing the following parameters:</p><ul><li>Class of CDAP B [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPlugin</span><span class=o>(</span>
+      <span class=n>Plugin</span><span class=o>.</span><span class=na>createBatch</span><span class=o>(</span>
+        <span class=n>MyCdapPlugin</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>MyInputFormat</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>MyInputFormatProvider</span><span class=o>.</span><span class=na>class</span><span class=o>))</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;read&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=examples-for-specific-cdap-plugins>Examples for specific CDAP plugins</h3><h4 id=cdap-hubspot-batch-source-plugin>CDAP Hubspot Batch Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=b [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>SourceHubspotConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>JsonElement</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>JsonElement</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>HubspotBatchSource</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>JsonElement</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromHubspotPlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h4 id=cdap-salesforce-batch-source-plugin>CDAP Salesforce Batch Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom titl [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>SalesforceSourceConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>Schema</span><span class=o>,</span> <span class=n>LinkedHashMap</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>Schema</span><span class=o>,</span> <span class=n>LinkedHashMap</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>SalesforceBatchSource</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>Schema</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>LinkedHashMap</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromSalesforcePlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h4 id=cdap-servicenow-batch-source-plugin>CDAP ServiceNow Batch Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom t [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>ServiceNowSourceConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>StructuredRecord</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>StructuredRecord</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>ServiceNowSource</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>StructuredRecord</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromServiceNowPlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h4 id=cdap-zendesk-batch-source-plugin>CDAP Zendesk Batch Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title=" [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>ZendeskBatchSourceConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>StructuredRecord</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>StructuredRecord</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>ZendeskBatchSource</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>StructuredRecord</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromZendeskPlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><p>To learn more please check out <a href=https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap>complete examples</a>.</p><h2 id=batch-writing-using-cdapio>Batch writing using [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>MyPluginConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span></code></pre></div></div></div><h3 id=write-data-by-plugin-class-name>Write data by plugin class name</h3><p>Some CDAP plugins  [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>write</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>HubspotBatchSink</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withLocksDirPath</span><span class=o>(</span><span class=n>locksDirPath</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;write&#34;</span><span class=o>,</span> <span class=n>writeTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=write-data-with-building-batch-plugin>Write data with building Batch Plugin</h3><p>If CDAP plugin is not supported by plugin class name, you can easily build <code>Plugin</code> object by passing the following parameters:</p><ul><li>Class of CD [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>write</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPlugin</span><span class=o>(</span>
+      <span class=n>Plugin</span><span class=o>.</span><span class=na>createBatch</span><span class=o>(</span>
+        <span class=n>MyCdapPlugin</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>MyOutputFormat</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>MyOutputFormatProvider</span><span class=o>.</span><span class=na>class</span><span class=o>))</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withLocksDirPath</span><span class=o>(</span><span class=n>locksDirPath</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;write&#34;</span><span class=o>,</span> <span class=n>writeTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=examples-for-specific-cdap-plugins-1>Examples for specific CDAP plugins</h3><h4 id=cdap-hubspot-batch-sink-plugin>CDAP Hubspot Batch Sink plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=b [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>SinkHubspotConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span> <span class=n>writeTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>write</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>pluginClass</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withLocksDirPath</span><span class=o>(</span><span class=n>locksDirPath</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;writeToHubspotPlugin&#34;</span><span class=o>,</span> <span class=n>writeTransform</span><span class=o>);</span></code></pre></div></div></div><h4 id=cdap-salesforce-batch-sink-plugin>CDAP Salesforce Batch Sink plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="C [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>SalesforceSinkConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>CSVRecord</span><span class=o>&gt;</span> <span class=n>writeTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>CSVRecord</span><span class=o>&gt;</span><span class=n>write</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>pluginClass</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>CSVRecord</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withLocksDirPath</span><span class=o>(</span><span class=n>locksDirPath</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;writeToSalesforcePlugin&#34;</span><span class=o>,</span> <span class=n>writeTransform</span><span class=o>);</span></code></pre></div></div></div><p>To learn more please check out <a href=https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap>complete examples</a>.</p><h2 id=streaming-reading-using-cdapio>Streaming re [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>MyPluginConfig</span><span class=o>.</span><span class=na>class</span><span class=o>).</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span></code></pre></div></div></div><h3 id=read-data-by-plugin-class-name-1>Read data by plugin class name</h3><p>Some CDAP plugins  [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>MyStreamingPlugin</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;read&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=read-data-with-building-streaming-plugin>Read data with building Streaming Plugin</h3><p>If CDAP plugin is not supported by plugin class name, you can easily build <code>Plugin</code> object by passing the following parameters:</p><ul><li>Class o [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPlugin</span><span class=o>(</span>
+      <span class=n>Plugin</span><span class=o>.</span><span class=na>createStreaming</span><span class=o>(</span>
+        <span class=n>MyStreamingPlugin</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>myGetOffsetFn</span><span class=o>,</span>
+        <span class=n>MyReceiver</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>myGetReceiverArgsFromConfigFn</span><span class=o>))</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;read&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=read-data-with-optional-parameters>Read data with optional parameters</h3><p>Optionally you can pass the following optional parameters:</p><ul><li><code>pullFrequencySec</code>, which is delay in seconds between polling for new records updates.</ [...]
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPluginClass</span><span class=o>(</span><span class=n>MyStreamingPlugin</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPullFrequencySec</span><span class=o>(</span><span class=n>1L</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withStartOffset</span><span class=o>(</span><span class=n>1L</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;read&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=examples-for-specific-cdap-plugins-2>Examples for specific CDAP plugins</h3><h4 id=cdap-hubspot-streaming-source-plugin>CDAP Hubspot Streaming Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=c [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>HubspotStreamingSourceConfig</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>.</span><span class=na>Read</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPlugin</span><span class=o>(</span>
+      <span class=n>Plugin</span><span class=o>.</span><span class=na>createStreaming</span><span class=o>(</span>
+        <span class=n>HubspotStreamingSource</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>GetOffsetUtils</span><span class=o>.</span><span class=na>getOffsetFnForHubspot</span><span class=o>(),</span>
+        <span class=n>HubspotReceiver</span><span class=o>.</span><span class=na>class</span><span class=o>))</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromHubspotPlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h4 id=cdap-salesforce-streaming-source-plugin>CDAP Salesforce Streaming Source plugin</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bot [...]
+  <span class=k>new</span> <span class=n>ConfigWrapper</span><span class=o>&lt;&gt;(</span><span class=n>SalesforceStreamingSourceConfig</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withParams</span><span class=o>(</span><span class=n>pluginConfigParams</span><span class=o>).</span><span class=na>build</span><span class=o>();</span>
+<span class=n>CdapIO</span><span class=o>.</span><span class=na>Read</span><span class=o>&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>CdapIO</span><span class=o>.&lt;</span><span class=n>NullWritable</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withCdapPlugin</span><span class=o>(</span>
+      <span class=n>Plugin</span><span class=o>.</span><span class=na>createStreaming</span><span class=o>(</span>
+        <span class=n>SalesforceStreamingSource</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>GetOffsetUtils</span><span class=o>.</span><span class=na>getOffsetFnForSalesforce</span><span class=o>(),</span>
+        <span class=n>SalesforceReceiver</span><span class=o>.</span><span class=na>class</span><span class=o>,</span>
+        <span class=n>config</span> <span class=o>-&gt;</span> <span class=o>{</span>
+          <span class=n>SalesforceStreamingSourceConfig</span> <span class=n>salesforceConfig</span> <span class=o>=</span>
+            <span class=n>SalesforceStreamingSourceConfig</span><span class=o>)</span> <span class=n>config</span><span class=o>;</span>
+          <span class=k>return</span> <span class=k>new</span> <span class=n>Object</span><span class=o>[]</span> <span class=o>{</span>
+            <span class=n>salesforceConfig</span><span class=o>.</span><span class=na>getAuthenticatorCredentials</span><span class=o>(),</span>
+            <span class=n>salesforceConfig</span><span class=o>.</span><span class=na>getPushTopicName</span><span class=o>()</span>
+          <span class=o>};</span>
+        <span class=o>}))</span>
+    <span class=o>.</span><span class=na>withPluginConfig</span><span class=o>(</span><span class=n>pluginConfig</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withKeyClass</span><span class=o>(</span><span class=n>NullWritable</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withValueClass</span><span class=o>(</span><span class=n>String</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromSalesforcePlugin&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><p>To learn more please check out <a href=https://github.com/apache/beam/tree/master/examples/java/cdap/src/main/java/org/apache/beam/examples/complete/cdap>complete examples</a>.</p><div class=feedback><p class=update>Last updated o [...]
+<a href=https://www.apache.org>The Apache Software Foundation</a>
+| <a href=/privacy_policy>Privacy Policy</a>
+| <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/io/built-in/google-bigquery/index.html b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
index 7b81d5db35c..d1181ed8115 100644
--- a/website/generated-content/documentation/io/built-in/google-bigquery/index.html
+++ b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 to <a href=https://cloud.google.com/bigquery>Google BigQuery</a> tables.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use BigQueryIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code cl [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>google</span><span class=o>-</span><span class=n>cloud</span><span class=o>-</span><span class=n>platform</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/io/built-in/hadoop/index.html b/website/generated-content/documentation/io/built-in/hadoop/index.html
index 0c27e7de17b..79bda551168 100644
--- a/website/generated-content/documentation/io/built-in/hadoop/index.html
+++ b/website/generated-content/documentation/io/built-in/hadoop/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <span class=c1>// Set Hadoop InputFormat, key and value class in configuration
 </span><span class=c1></span><span class=n>myHadoopConfiguration</span><span class=o>.</span><span class=na>setClass</span><span class=o>(</span><span class=s>&#34;mapreduce.job.inputformat.class&#34;</span><span class=o>,</span> <span class=n>InputFormatClass</span><span class=o>,</span>
   <span class=n>InputFormat</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
diff --git a/website/generated-content/documentation/io/built-in/hcatalog/index.html b/website/generated-content/documentation/io/built-in/hcatalog/index.html
index c7e1d1d9da0..40e523defce 100644
--- a/website/generated-content/documentation/io/built-in/hcatalog/index.html
+++ b/website/generated-content/documentation/io/built-in/hcatalog/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <span class=n>configProperties</span><span class=o>.</span><span class=na>put</span><span class=o>(</span><span class=s>&#34;hive.metastore.uris&#34;</span><span class=o>,</span><span class=s>&#34;thrift://metastore-host:port&#34;</span><span class=o>);</span>
 <span class=n>pipeline</span>
   <span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>HCatalogIO</span><span class=o>.</span><span class=na>read</span><span class=o>()</span>
diff --git a/website/generated-content/documentation/io/built-in/parquet/index.html b/website/generated-content/documentation/io/built-in/parquet/index.html
index d075da65c6c..4db585dde46 100644
--- a/website/generated-content/documentation/io/built-in/parquet/index.html
+++ b/website/generated-content/documentation/io/built-in/parquet/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 to <a href=https://parquet.apache.org>Apache Parquet</a> files.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use ParquetIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=langua [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>parquet</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/io/built-in/snowflake/index.html b/website/generated-content/documentation/io/built-in/snowflake/index.html
index b50f249af4f..ad370d758e9 100644
--- a/website/generated-content/documentation/io/built-in/snowflake/index.html
+++ b/website/generated-content/documentation/io/built-in/snowflake/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
     &lt;groupId&gt;org.apache.beam&lt;/groupId&gt;
     &lt;artifactId&gt;beam-sdks-java-io-snowflake&lt;/artifactId&gt;
     &lt;version&gt;2.43.0&lt;/version&gt;
diff --git a/website/generated-content/documentation/io/built-in/sparkreceiver/index.html b/website/generated-content/documentation/io/built-in/sparkreceiver/index.html
new file mode 100644
index 00000000000..8ae6c5b7937
--- /dev/null
+++ b/website/generated-content/documentation/io/built-in/sparkreceiver/index.html
@@ -0,0 +1,48 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>SparkReceiver IO</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Speci [...]
+<a class=navbar-link href=/get-started/>Get Started</a>
+<a class=navbar-link href=/documentation/>Documentation</a>
+<button type=button class="navbar-toggle menu-open" aria-expanded=false aria-controls=navbar onclick=openMenu()>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><button type=button class=navbar-toggle aria-expanded=false aria-controls=navbar id=closeMenu>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var cx='012923275103528129024:4emlchv9wzi';var gcse=document.createElement('script');gcse.type='text/javascript';gcse.async=true;gcse.src='https://cse.google.com/cse.js?cx='+cx;var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gcse,s);})();</script><gcse:search></gcse:search></div></li><li><a c [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
+<a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
+<span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="11" fill="none" viewBox="0 0 12 11"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.666 4.535 5.847 9.108 1.444 4.535"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link href=/documentation/>General</a></li><li><a class=navbar-dropdown-menu-link href=/documentation/sdks/java/>Languages</a></li><li><a class=navbar-dropdown-menu-link href=/documentati [...]
+<a class=navbar-link href=/community/>Community</a>
+<a class=navbar-link href=/contribute/>Contribute</a>
+<a class=navbar-link href=/blog/>Blog</a>
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zM21.191 21l-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
+function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
+function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
+function blockScroll(){$("body").toggleClass("fixedPosition");}
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+</span><span class=c1></span><span class=n>MyConfig</span> <span class=n>myPluginConfig</span> <span class=o>=</span> <span class=k>new</span> <span class=n>MyConfig</span><span class=o>(</span><span class=n>authToken</span><span class=o>,</span> <span class=n>apiServerUrl</span><span class=o>);</span>
+<span class=n>Object</span><span class=o>[]</span> <span class=n>myConstructorArgs</span> <span class=o>=</span> <span class=k>new</span> <span class=n>Object</span><span class=o>[]</span> <span class=o>{</span><span class=n>myConfig</span><span class=o>};</span>
+<span class=n>ReceiverBuilder</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>MyReceiver</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;&gt;</span> <span class=n>myReceiverBuilder</span> <span class=o>=</span>
+  <span class=k>new</span> <span class=n>ReceiverBuilder</span><span class=o>&lt;&gt;(</span><span class=n>MyReceiver</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withConstructorArgs</span><span class=o>(</span><span class=n>myConstructorArgs</span><span class=o>);</span></code></pre></div></div></div><p>Then you will be able to pass this <code>receiverBuilder</code> object to <code>SparkReceiverIO</code>.</p><p>For example:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img sr [...]
+  <span class=n>SparkReceiverIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withGetOffsetFn</span><span class=o>(</span><span class=n>Long</span><span class=o>::</span><span class=n>valueOf</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withSparkReceiverBuilder</span><span class=o>(</span><span class=n>myReceiverBuilder</span><span class=o>)</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromMyReceiver&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=read-data-with-optional-parameters>Read data with optional parameters</h3><p>Optionally you can pass the following optional parameters:</p><ul><li><code>pullFrequencySec</code>, which is delay in seconds between polling for new reco [...]
+  <span class=n>SparkReceiverIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withGetOffsetFn</span><span class=o>(</span><span class=n>Long</span><span class=o>::</span><span class=n>valueOf</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withSparkReceiverBuilder</span><span class=o>(</span><span class=n>myReceiverBuilder</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withPullFrequencySec</span><span class=o>(</span><span class=n>1L</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withStartOffset</span><span class=o>(</span><span class=n>1L</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withTimestampFn</span><span class=o>(</span><span class=n>Instant</span><span class=o>::</span><span class=n>parse</span><span class=o>);</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromReceiver&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><h3 id=examples-for-specific-spark-receiver>Examples for specific Spark Receiver</h3><h4 id=cdap-hubspot-receiver>CDAP Hubspot Receiver</h4><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button  [...]
+  <span class=k>new</span> <span class=n>ReceiverBuilder</span><span class=o>&lt;&gt;(</span><span class=n>HubspotReceiver</span><span class=o>.</span><span class=na>class</span><span class=o>)</span>
+    <span class=o>.</span><span class=na>withConstructorArgs</span><span class=o>(</span><span class=n>hubspotConfig</span><span class=o>);</span>
+<span class=n>SparkReceiverIO</span><span class=o>.</span><span class=na>Read</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>readTransform</span> <span class=o>=</span>
+  <span class=n>SparkReceiverIO</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>&gt;</span><span class=n>read</span><span class=o>()</span>
+    <span class=o>.</span><span class=na>withGetOffsetFn</span><span class=o>(</span><span class=n>GetOffsetUtils</span><span class=o>.</span><span class=na>getOffsetFnForHubspot</span><span class=o>())</span>
+    <span class=o>.</span><span class=na>withSparkReceiverBuilder</span><span class=o>(</span><span class=n>hubspotReceiverBuilder</span><span class=o>)</span>
+<span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;readFromHubspotReceiver&#34;</span><span class=o>,</span> <span class=n>readTransform</span><span class=o>);</span></code></pre></div></div></div><div class=feedback><p class=update>Last updated on 2022/12/06</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!< [...]
+<a href=https://www.apache.org>The Apache Software Foundation</a>
+| <a href=/privacy_policy>Privacy Policy</a>
+| <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/io/connectors/index.html b/website/generated-content/documentation/io/connectors/index.html
index c48a64e5ef6..c94fd2015b3 100644
--- a/website/generated-content/documentation/io/connectors/index.html
+++ b/website/generated-content/documentation/io/connectors/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/FileIO.html>native</a></td><td class=present>✔
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.io.fileio.html>native</a></td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td>AvroIO</td><td class=present>✔</td><td class=present>✔</td><td class=present>✔
 <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/AvroIO.html>native</a></td><td class=present>✔
@@ -98,7 +98,9 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
 native</td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr><tr><td>Pub/Sub Lite</td><td class=present>✔</td><td class=present>✔</td><td class=present>✔
 <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/pubsublite/PubsubLiteIO.html>native</a></td><td class=present>✔
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.io.gcp.pubsublite.html>via X-language</a></td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td>InfluxDB</td><td class=present>✔</td><td class=present>✔</td><td class=present>✔
-<a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/influxdb/InfluxDbIO.html>native</a></td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr></table></div><h2 id=other-io-connectors-for-apache-beam>Other I/O Connectors for Apache Beam</h2><div class=table-container-wrapper><table class="table table-bordered table-connectors"><tr><th>Connector Name</th><th>Source Supported</th><th>Sink Supported</th><th>Java</th>< [...]
+<a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/influxdb/InfluxDbIO.html>native</a></td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td>SparkReceiverIO (<a href=/documentation/io/built-in/sparkreceiver/>guide</a>)</td><td class=present>✔</td><td class=present>✘</td><td class=present>✔
+<a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/sparkreceiver/2/SparkReceiverIO.html>native</a></td><td>Not available</td><td>Not available</td><td class=present>✘</td><td class=present>✔</td></tr><tr><td>CdapIO (<a href=/documentation/io/built-in/cdap/>guide</a>)</td><td class=present>✔</td><td class=present>✔</td><td class=present>✔
+<a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/cdap/CdapIO.html>native</a></td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr></table></div><h2 id=other-io-connectors-for-apache-beam>Other I/O Connectors for Apache Beam</h2><div class=table-container-wrapper><table class="table table-bordered table-connectors"><tr><th>Connector Name</th><th>Source Supported</th><th>Sink Supported</th><th>Java</th><th>Pytho [...]
 native</td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td><a href=https://github.com/google/hana-bq-beam-connector>SAP Hana to Google BigQuery</a></td><td class=present>✔</td><td class=present>✔</td><td class=present>✔
 native</td><td>Not available</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr><tr><td><a href=https://github.com/esakik/beam-mysql-connector>MySQL</a></td><td class=present>✔</td><td class=present>✔</td><td>Not available</td><td class=present>✔
 native</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr><tr><td><a href=https://github.com/Refinitiv/trep-websockets-beam-io>TrepWsIO</a></td><td class=present>✔</td><td class=absent>✘</td><td class=present>✔
@@ -108,7 +110,7 @@ native</td><td>Not available</td><td>Not available</td><td class=present>✔</td
 native</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr><tr><td><a href=https://github.com/amient/goconnect>Go Connect</a></td><td class=present>✔</td><td class=present>✔</td><td class=absent>✘</td><td class=absent>✘</td><td class=present>✔
 native</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td><a href=https://github.com/tinybirdco/tinybird-beam>Tinybird</a></td><td class=absent>✘</td><td class=present>✔</td><td>Not available</td><td class=present>✔
 native</td><td>Not available</td><td class=present>✔</td><td class=present>✔</td></tr><tr><td><a href=https://github.com/jccatrinck/dataflow-cloud-sql-python>Cloud SQL</a></td><td class=present>✔</td><td class=absent>✘</td><td>Not available</td><td class=present>✔
-native</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr></table></div><div class=feedback><p class=update>Last updated on 2022/11/07</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load-button><a href="mailto:dev@beam.apache.org?subject=Beam Website Feedback">SEND FEEDBACK</a></button></div></div></div><footer class=foote [...]
+native</td><td>Not available</td><td class=present>✔</td><td class=absent>✘</td></tr></table></div><div class=feedback><p class=update>Last updated on 2022/12/06</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load-button><a href="mailto:dev@beam.apache.org?subject=Beam Website Feedback">SEND FEEDBACK</a></button></div></div></div><footer class=foote [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/io/developing-io-java/index.html b/website/generated-content/documentation/io/developing-io-java/index.html
index d00dd0bbe33..1c53b0f8c31 100644
--- a/website/generated-content/documentation/io/developing-io-java/index.html
+++ b/website/generated-content/documentation/io/developing-io-java/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=/documentation/io/developing-io-overview/>new I/O connector overview</a>.</p><p>To connect to a data store that isn’t supported by Beam’s existing I/O
 connectors, you must create a custom I/O connector that usually consist of a
 source and a sink. All Beam sources and sinks are composite transforms; however,
diff --git a/website/generated-content/documentation/io/developing-io-overview/index.html b/website/generated-content/documentation/io/developing-io-overview/index.html
index 8bf2cbb296c..01f9d99626b 100644
--- a/website/generated-content/documentation/io/developing-io-overview/index.html
+++ b/website/generated-content/documentation/io/developing-io-overview/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 the <a href=/documentation/io/built-in/>Built-in I/O connectors</a></em></p><p>To connect to a data store that isn’t supported by Beam’s existing I/O
 connectors, you must create a custom I/O connector. A connector usually consists
 of a source and a sink. All Beam sources and sinks are composite transforms;
diff --git a/website/generated-content/documentation/io/developing-io-python/index.html b/website/generated-content/documentation/io/developing-io-python/index.html
index e486791d2ab..6e7c10061a8 100644
--- a/website/generated-content/documentation/io/developing-io-python/index.html
+++ b/website/generated-content/documentation/io/developing-io-python/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 the <a href=/documentation/io/developing-io-overview/>new I/O connector overview</a>.</p><p>To connect to a data store that isn’t supported by Beam’s existing I/O
 connectors, you must create a custom I/O connector that usually consist of a
 source and a sink. All Beam sources and sinks are composite transforms; however,
diff --git a/website/generated-content/documentation/io/testing/index.html b/website/generated-content/documentation/io/testing/index.html
index ff5d9325733..5b4645648aa 100644
--- a/website/generated-content/documentation/io/testing/index.html
+++ b/website/generated-content/documentation/io/testing/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 </code></pre><p>Example usage on HDFS filesystem and Direct runner:</p><p>NOTE: Below setup will only work when /etc/hosts file contains entries with hadoop namenode and hadoop datanodes external IPs. Please see explanation in: <a href=https://github.com/apache/beam/blob/master/.test-infra/kubernetes/hadoop/SmallITCluster/hdfs-single-datanode-cluster.yml>Small Cluster config file</a> and <a href=https://github.com/apache/beam/blob/master/.test-infra/kubernetes/hadoop/LargeITCluster/hdfs- [...]
 
 ./gradlew integrationTest -p sdks/java/io/file-based-io-tests -DintegrationTestPipelineOptions='[&quot;--numberOfRecords=1000&quot;, &quot;--filenamePrefix=hdfs://HDFS_NAMENODE:9000/XMLIOIT&quot;, &quot;--hdfsConfiguration=[{\&quot;fs.defaultFS\&quot;:\&quot;hdfs://HDFS_NAMENODE:9000\&quot;,\&quot;dfs.replication\&quot;:1,\&quot;dfs.client.use.datanode.hostname\&quot;:\&quot;true\&quot; }]&quot; ]' -DintegrationTestRunner=direct -Dfilesystem=hdfs --tests org.apache.beam.sdk.io.xml.XmlIOIT
diff --git a/website/generated-content/documentation/ml/anomaly-detection/index.html b/website/generated-content/documentation/ml/anomaly-detection/index.html
index e1a30da4a4e..2ddbaa34be2 100644
--- a/website/generated-content/documentation/ml/anomaly-detection/index.html
+++ b/website/generated-content/documentation/ml/anomaly-detection/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 ├── pipeline/
 │   ├── __init__.py
 │   ├── options.py
diff --git a/website/generated-content/documentation/ml/data-processing/index.html b/website/generated-content/documentation/ml/data-processing/index.html
index 8647310c3af..57104e3db94 100644
--- a/website/generated-content/documentation/ml/data-processing/index.html
+++ b/website/generated-content/documentation/ml/data-processing/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 from apache_beam.runners.interactive.interactive_runner import InteractiveRunner
 import apache_beam.runners.interactive.interactive_beam as ib
 
diff --git a/website/generated-content/documentation/ml/large-language-modeling/index.html b/website/generated-content/documentation/ml/large-language-modeling/index.html
index b96b12db45b..97bb1020aa4 100644
--- a/website/generated-content/documentation/ml/large-language-modeling/index.html
+++ b/website/generated-content/documentation/ml/large-language-modeling/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 You can view the code on <a href=https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/inference/large_language_modeling/main.py>GitHub</a></p><ol><li>Locally on your machine: <code>python main.py --runner DirectRunner</code>. You need to have 45 GB of disk space available to run this example.</li><li>On Google Cloud using Dataflow: <code>python main.py --runner DataflowRunner</code></li></ol><h3 id=pipeline-steps>Pipeline Steps</h3><p>The pipeline contains the foll [...]
         _ = (
             pipeline
diff --git a/website/generated-content/documentation/ml/multi-model-pipelines/index.html b/website/generated-content/documentation/ml/multi-model-pipelines/index.html
index ed2d632908a..a3225fcd973 100644
--- a/website/generated-content/documentation/ml/multi-model-pipelines/index.html
+++ b/website/generated-content/documentation/ml/multi-model-pipelines/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 and transform input data, run it through a model, and then pass the outcome of your first model
 into a second model. This page explains how multi-model pipelines work and gives an overview of what
 you need to know to build one.</p><p>Before reading this section, it is recommended that you become familiar with the information in
diff --git a/website/generated-content/documentation/ml/online-clustering/index.html b/website/generated-content/documentation/ml/online-clustering/index.html
index 6efe64e6b73..417c20d33b4 100644
--- a/website/generated-content/documentation/ml/online-clustering/index.html
+++ b/website/generated-content/documentation/ml/online-clustering/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 ├── pipeline/
 │   ├── __init__.py
 │   ├── options.py
diff --git a/website/generated-content/documentation/ml/orchestration/index.html b/website/generated-content/documentation/ml/orchestration/index.html
index 88bf492e192..58e2d1ebd33 100644
--- a/website/generated-content/documentation/ml/orchestration/index.html
+++ b/website/generated-content/documentation/ml/orchestration/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Without this knowledge, troubleshooting, monitoring, and improving your ML solutions becomes increaseingly difficult when your solutions grow in size.</li></ul><p>The solution: MLOps. MLOps is an umbrella term used to describe best practices and guiding principles that aim to make the development and maintenance of machine learning systems seamless and efficient. MLOps most often entails automating machine learning workflows throughout the model and data lifecycle. Popular frameworks to  [...]
 When choosing between the two frameworks, you need to consider the trade-off between flexibility and programming overhead.</li></ul><p>For simplicity, the workflows only contain three components: data ingestion, data preprocessing, and model training. Depending on the scenario, you can add a range of extra components, such as model evaluation and model deployment. This example focuses on the preprocessing component, because it demonstrates how to use Apache Beam in an ML workflow for eff [...]
     ├── pipeline.py
diff --git a/website/generated-content/documentation/ml/overview/index.html b/website/generated-content/documentation/ml/overview/index.html
index f67f0a48024..5d905ffba5c 100644
--- a/website/generated-content/documentation/ml/overview/index.html
+++ b/website/generated-content/documentation/ml/overview/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 upscaling your data pipelines as part of your MLOps ecosystem in a production environment.</li><li>It enables you to run your model in production on a varying data load, both in batch and streaming.</li></ul><h2 id=aiml-workloads>AI/ML workloads</h2><p>Let’s take a look at the different building blocks that we need to create an end-to-end AI/ML use case and where Apache Beam can help.</p><p><img src=/images/ml-workflows.svg alt="Overview of AI/ML building blocks and where Apache Beam can [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/ml/runinference-metrics/index.html b/website/generated-content/documentation/ml/runinference-metrics/index.html
index 4f334a9e79f..f755c4787fb 100644
--- a/website/generated-content/documentation/ml/runinference-metrics/index.html
+++ b/website/generated-content/documentation/ml/runinference-metrics/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 ├── pipeline/
 │   ├── __init__.py
 │   ├── options.py
diff --git a/website/generated-content/documentation/patterns/ai-platform/index.html b/website/generated-content/documentation/patterns/ai-platform/index.html
index 4ff1a0d0c90..87c6b0cc436 100644
--- a/website/generated-content/documentation/patterns/ai-platform/index.html
+++ b/website/generated-content/documentation/patterns/ai-platform/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <code>AnnotateText</code> produces response object of type <code>AnnotateTextResponse</code> returned from the API. <code>AnnotateTextResponse</code> is a protobuf message which contains a lot of attributes, some of which are complex structures.</p><p>Here is an example of a pipeline that creates in-memory PCollection of strings, changes each string to Document object and invokes Natural Language API. Then, for each response object, a function is called to extract certain results of anal [...]
     <span class=n>extract_entities</span><span class=o>=</span><span class=bp>True</span><span class=p>,</span>
     <span class=n>extract_document_sentiment</span><span class=o>=</span><span class=bp>True</span><span class=p>,</span>
diff --git a/website/generated-content/documentation/patterns/bigqueryio/index.html b/website/generated-content/documentation/patterns/bigqueryio/index.html
index b569fc7f066..91f87a5aff7 100644
--- a/website/generated-content/documentation/patterns/bigqueryio/index.html
+++ b/website/generated-content/documentation/patterns/bigqueryio/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 The samples below print the errors, but in a production system they can be sent to a deadletter table for later correction.</p><p class=language-java>When using <code>STREAMING_INSERTS</code> you can use the <code>WriteResult</code> object to access a <code>PCollection</code> with the <code>TableRows</code> that failed to be inserted into BigQuery.
 If you also set the <code>withExtendedErrorInfo</code> property , you will be able to access a <code>PCollection&lt;BigQueryInsertError></code> from the <code>WriteResult</code>. The <code>PCollection</code> will then include a reference to the table, the data row and the <code>InsertErrors</code>. Which errors are added to the deadletter queue is determined via the <code>InsertRetryPolicy</code>.</p><p class=language-py>In the result tuple you can access <code>FailedRows</code> to acces [...]
           <span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>fromArgs</span><span class=o>(</span><span class=n>args</span><span class=o>).</span><span class=na>withValidation</span><span class=o>().</span><span class=na>as</span><span class=o>(</span><span class=n>BigQueryOptions</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
diff --git a/website/generated-content/documentation/patterns/bqml/index.html b/website/generated-content/documentation/patterns/bqml/index.html
index 8c238f366be..b8b127b76ca 100644
--- a/website/generated-content/documentation/patterns/bqml/index.html
+++ b/website/generated-content/documentation/patterns/bqml/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 OPTIONS(model_type='logistic_reg', input_label_cols=[&quot;label&quot;]) AS
 SELECT
   IF(totals.transactions IS NULL, 0, 1) AS label,
diff --git a/website/generated-content/documentation/patterns/custom-io/index.html b/website/generated-content/documentation/patterns/custom-io/index.html
index 9a59ff499c1..0716ee37ef1 100644
--- a/website/generated-content/documentation/patterns/custom-io/index.html
+++ b/website/generated-content/documentation/patterns/custom-io/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/patterns/custom-windows/index.html b/website/generated-content/documentation/patterns/custom-windows/index.html
index 053175ab6ff..bf2f92b5611 100644
--- a/website/generated-content/documentation/patterns/custom-windows/index.html
+++ b/website/generated-content/documentation/patterns/custom-windows/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 
     <span class=c1>// Assign each element into a window from its timestamp until gapDuration in the
 </span><span class=c1></span>    <span class=c1>// future.  Overlapping windows (representing elements within gapDuration of
diff --git a/website/generated-content/documentation/patterns/file-processing/index.html b/website/generated-content/documentation/patterns/file-processing/index.html
index fef7430ac7a..ecf45d6673e 100644
--- a/website/generated-content/documentation/patterns/file-processing/index.html
+++ b/website/generated-content/documentation/patterns/file-processing/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 </span><span class=c1></span><span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span>
     <span class=n>FileIO</span><span class=o>.</span><span class=na>match</span><span class=o>()</span>
         <span class=o>.</span><span class=na>filepattern</span><span class=o>(</span><span class=s>&#34;...&#34;</span><span class=o>)</span>
diff --git a/website/generated-content/documentation/patterns/grouping-elements-for-efficient-external-service-calls/index.html b/website/generated-content/documentation/patterns/grouping-elements-for-efficient-external-service-calls/index.html
index e54b57b2106..3d826b18f49 100644
--- a/website/generated-content/documentation/patterns/grouping-elements-for-efficient-external-service-calls/index.html
+++ b/website/generated-content/documentation/patterns/grouping-elements-for-efficient-external-service-calls/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
           <span class=s>&#34;Batch Contents&#34;</span><span class=o>,</span>
           <span class=n>GroupIntoBatches</span><span class=o>.&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>GenericJson</span><span class=o>&gt;</span><span class=n>ofSize</span><span class=o>(</span><span class=n>batchSize</span><span class=o>)</span>
               <span class=o>.</span><span class=na>withMaxBufferingDuration</span><span class=o>(</span><span class=n>maxBufferingDuration</span><span class=o>)</span>
diff --git a/website/generated-content/documentation/patterns/overview/index.html b/website/generated-content/documentation/patterns/overview/index.html
index 612a847dc2b..cda2739f46a 100644
--- a/website/generated-content/documentation/patterns/overview/index.html
+++ b/website/generated-content/documentation/patterns/overview/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/patterns/pipeline-options/index.html b/website/generated-content/documentation/patterns/pipeline-options/index.html
index dd22a49d3c2..91d167f76e9 100644
--- a/website/generated-content/documentation/patterns/pipeline-options/index.html
+++ b/website/generated-content/documentation/patterns/pipeline-options/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
   <span class=kd>public</span> <span class=kd>interface</span> <span class=nc>MyOptions</span> <span class=kd>extends</span> <span class=n>PipelineOptions</span> <span class=o>{</span>
     <span class=nd>@Description</span><span class=o>(</span><span class=s>&#34;My option&#34;</span><span class=o>)</span>
     <span class=nd>@Default.String</span><span class=o>(</span><span class=s>&#34;Hello world!&#34;</span><span class=o>)</span>
diff --git a/website/generated-content/documentation/patterns/schema/index.html b/website/generated-content/documentation/patterns/schema/index.html
index 868328fc16a..a4ec457a36d 100644
--- a/website/generated-content/documentation/patterns/schema/index.html
+++ b/website/generated-content/documentation/patterns/schema/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Schemas provide us a type-system for Beam records that is independent of any specific programming-language type. There might be multiple Java classes that all have the same schema (for example a Protocol-Buffer class or a POJO class), and Beam will allow us to seamlessly convert between these types.
 Schemas also provide a simple way to reason about types across different programming-language APIs.
 For more information, see the <a href=/documentation/programming-guide/#what-is-a-schema>programming guide section on Schemas</a>.</p><nav class=language-switcher><strong>Adapt for:</strong><ul><li data-value=java class=active>Java SDK</li></ul></nav><h2 id=using-joins>Using Joins</h2><p>Beam supports equijoins on schema <code>PCollections</code> of Schemas where the join condition depends on the equality of a subset of fields.</p><p>Consider using <a href=https://beam.apache.org/release [...]
diff --git a/website/generated-content/documentation/patterns/side-inputs/index.html b/website/generated-content/documentation/patterns/side-inputs/index.html
index 8c2e1bc95c9..6c4cf31e01a 100644
--- a/website/generated-content/documentation/patterns/side-inputs/index.html
+++ b/website/generated-content/documentation/patterns/side-inputs/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
     <span class=c1>// This pipeline uses View.asSingleton for a placeholder external service.
 </span><span class=c1></span>    <span class=c1>// Run in debug mode to see the output.
 </span><span class=c1></span>    <span class=n>Pipeline</span> <span class=n>p</span> <span class=o>=</span> <span class=n>Pipeline</span><span class=o>.</span><span class=na>create</span><span class=o>();</span>
diff --git a/website/generated-content/documentation/pipelines/create-your-pipeline/index.html b/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
index 23e989762ca..b21025c9bec 100644
--- a/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 </span><span class=c1></span><span class=n>PipelineOptions</span> <span class=n>options</span> <span class=o>=</span> <span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>create</span><span class=o>();</span>
 
 <span class=c1>// Then create the pipeline.
diff --git a/website/generated-content/documentation/pipelines/design-your-pipeline/index.html b/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
index dc854468780..ac07b9932e7 100644
--- a/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 PCollection of database table rows.</em></p><p>The following example code applies two transforms to a single input collection.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>S [...]
 
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>aCollection</span> <span class=o>=</span> <span class=n>dbRowCollection</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;aTrans&#34;</span><span class=o>,</span> <span class=n>ParDo</span><span class=o>.</span><span class=na>of</span><span class=o>(</span><span class=k>new</span> <span class=n>DoFn</span><span class=o>& [...]
diff --git a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
index 6b2ff064ac2..ab416604eab 100644
--- a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
     <span class=o>...</span></code></pre></div></div></div><blockquote><p><strong>Note:</strong> Read about testing unbounded pipelines in Beam in <a href=/blog/2016/10/20/test-stream.html>this blog post</a>.</p></blockquote><h3 id=using-the-create-transform>Using the Create Transform</h3><p>You can use the <code>Create</code> transform to create a <code>PCollection</code> out of a standard in-memory collection class, such as Java or Python <code>List</code>. See <a href=/documentation/p [...]
 
 <span class=c1>// Check whether a PCollection contains some elements in any order.
diff --git a/website/generated-content/documentation/programming-guide/index.html b/website/generated-content/documentation/programming-guide/index.html
index d4964685aaa..5bfe53c4260 100644
--- a/website/generated-content/documentation/programming-guide/index.html
+++ b/website/generated-content/documentation/programming-guide/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Beam SDKs to create data processing pipelines. It provides guidance for using
 the Beam SDK classes to build and test your pipeline. The programming guide is
 not intended as an exhaustive reference, but as a language-agnostic, high-level
diff --git a/website/generated-content/documentation/runners/jstorm/index.html b/website/generated-content/documentation/runners/jstorm/index.html
index 048d7021169..505653ae087 100644
--- a/website/generated-content/documentation/runners/jstorm/index.html
+++ b/website/generated-content/documentation/runners/jstorm/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>jstorm</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>43</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/runtime/environments/index.html b/website/generated-content/documentation/runtime/environments/index.html
index 6cdb6138249..2a8153e5d4f 100644
--- a/website/generated-content/documentation/runtime/environments/index.html
+++ b/website/generated-content/documentation/runtime/environments/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 
 ENV FOO=bar
 COPY /src/path/to/file /dest/path/to/file/
diff --git a/website/generated-content/documentation/runtime/model/index.html b/website/generated-content/documentation/runtime/model/index.html
index ce0e49516a6..2366db161f2 100644
--- a/website/generated-content/documentation/runtime/model/index.html
+++ b/website/generated-content/documentation/runtime/model/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 may observe various effects as a result of the runner’s choices. This page
 describes these effects so you can better understand how Beam pipelines execute.</p><h2 id=processing-of-elements>Processing of elements</h2><p>The serialization and communication of elements between machines is one of the
 most expensive operations in a distributed execution of your pipeline. Avoiding
diff --git a/website/generated-content/documentation/runtime/resource-hints/index.html b/website/generated-content/documentation/runtime/resource-hints/index.html
index 30762f16b05..2b69ea419a2 100644
--- a/website/generated-content/documentation/runtime/resource-hints/index.html
+++ b/website/generated-content/documentation/runtime/resource-hints/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
     <span class=o>-</span><span class=n>Dexec</span><span class=o>.</span><span class=na>args</span><span class=o>=</span><span class=s>&#34;... \
 </span><span class=s>                 --resourceHints=min_ram=&lt;N&gt;GB \
 </span><span class=s>                 --resourceHints=accelerator=&#39;hint&#39;&#34;</span> <span class=err>\</span>
diff --git a/website/generated-content/documentation/runtime/sdk-harness-config/index.html b/website/generated-content/documentation/runtime/sdk-harness-config/index.html
index 077d3ea5cfc..927509b6471 100644
--- a/website/generated-content/documentation/runtime/sdk-harness-config/index.html
+++ b/website/generated-content/documentation/runtime/sdk-harness-config/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 accommodate varying cluster setups.
 (The options below are for Python, but much of this information should apply to the Java and Go SDKs
 as well.)</p><ul><li><code>environment_type</code> determines where user code will be executed.
diff --git a/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html b/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
index 50c178129d1..f4a54c02fec 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Takes a comparison function and the desired number of quantiles <em>n</em>, either
 globally or per-key. Using an approximation algorithm, it returns the
 minimum value, <em>n-2</em> intermediate values, and the maximum value.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>: to compute the quartiles of a <code>PCollection</code> of integers, we
diff --git a/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html b/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
index 2618566a93f..e56bbae0f6d 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for estimating the number of distinct elements in a collection
 or the number of distinct values associated with each key in a collection
 of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/hllcount>HllCount</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html b/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
index 6aa28bae511..594a3f15f36 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Aggregates all input elements by their key and allows downstream processing
 to consume all values associated with the key. While <code>GroupByKey</code> performs
 this operation over a single input collection and thus a single type of
diff --git a/website/generated-content/documentation/transforms/java/aggregation/combine/index.html b/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
index 91787e281cf..f6e69c413a3 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>A user-defined <code>CombineFn</code> may be applied to combine all elements in a
 <code>PCollection</code> (global combine) or to combine all elements associated
 with each key.</p><p>While the result is similar to applying a <code>GroupByKey</code> followed by
diff --git a/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html b/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
index cdfe93d34f2..67a94d3a243 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>A class of transforms that contains combine functions that have access to <code>PipelineOptions</code> and side inputs through <code>CombineWithContext.Context</code>.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/combine>Combine</a>
 for combining all values associated with a key to a single result</li></ul><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load-button><a href="mailto:dev@beam.apache.org?subject=Beam Website Feedback">SEND FEEDBACK</a></button></div></div></div><footer class=footer><div class=footer__con [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/count/index.html b/website/generated-content/documentation/transforms/java/aggregation/count/index.html
index d60e5c09377..490e5fe801c 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/count/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/count/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Counts the number of elements within each aggregation. The <code>Count</code>
 transform has three varieties:</p><ul><li><code>Count.globally()</code> counts the number of elements in the entire
 <code>PCollection</code>. The result is a collection with a single element.</li><li><code>Count.perKey()</code> counts how many elements are associated with each
diff --git a/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html b/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
index 1000dacf7f5..245339e1015 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Produces a collection containing distinct elements of the input collection.</p><p>On some data sets, it might be more efficient to compute an approximate
 answer using <code>ApproximateUnique</code>, which also allows for determining distinct
 values for each key.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong> Find the distinct element from a <code>PCollection</code> of <code>String</code>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=kd>static</span> <span [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html b/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
index dd6fdcc28ea..9b55ca9e321 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Takes a keyed collection of elements and produces a collection where
 each element consists of a key and an <code>Iterable</code> of all values
 associated with that key.</p><p>The results can be combined with windowing to subdivide each key
diff --git a/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html b/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
index b1a8464ae8b..a008edbccd3 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Batches inputs to a desired batch size.</p><p>Batches contain only elements of a single key. Elements are buffered until
 <code>batchSize</code> number of elements buffered. Then, these elements are output
 to the output collection.</p><p>Batches contain elements from the same window, so windows are preserved. Batches might contain elements from more than one bundle.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/groupbykey>GroupByKey</a> takes one input collection.</li></ul><div class=feedback><p class=upda [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html b/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
index 7d4a85be57b..16872954f00 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Estimates the number of distinct elements in a data stream using the
 <a href=https://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/40671.pdf>HyperLogLog++ algorithm</a>.
 The respective transforms to create and merge sketches, and to extract from them, are:</p><ul><li><code>HllCount.Init</code> aggregates inputs into HLL++ sketches.</li><li><code>HllCount.MergePartial</code> merges HLL++ sketches into a new sketch.</li><li><code>HllCount.Extract</code> extracts the estimated count of distinct elements from HLL++ sketches.</li></ul><p>You can read more about what a sketch is at <a href=https://github.com/google/zetasketch>https://github.com/google/zetasket [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/latest/index.html b/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
index 316e38b0222..52f342d1a69 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>A transform and <code>Combine.CombineFn</code> for computing the latest element in a collection.</p><ul><li><code>Latest.globally()</code> takes a collection of values and produces the collection
 containing the single value with the latest implicit timestamp.</li><li><code>Latest.perKey()</code> takes a collection of key value pairs, and returns the
 latest value for each key, according to the implicit timestamp.</li></ul><p>For elements with the same timestamp, the output element is arbitrarily selected.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>: compute the latest value for each session<div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight>< [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/max/index.html b/website/generated-content/documentation/transforms/java/aggregation/max/index.html
index c02855bc2d1..2b647d7e277 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/max/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/max/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Provides a variety of different transforms for computing the maximum
 values in a collection, either globally or for each key.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: get the maximum of a <code>PCollection</code> of <code>Doubles</code>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span cl [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>max</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Max</span><span class=o>.</span><span class=na>doublesGlobally</span><span class=o>());</span></code></pre></div></div></div><p><strong>Example 2</strong>: calculate the maximum of the <code>Integers</code> associated
diff --git a/website/generated-content/documentation/transforms/java/aggregation/mean/index.html b/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
index 1d014b24ec7..e1fc0469e88 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for computing the arithmetic mean of the elements in a collection,
 or the mean of the values associated with each key in a collection of key-value pairs.</p><ul><li><code>Mean.globally()</code> returns a transform that then returns a collection whose contents is the mean of the input collection&rsquo;s elements. If there are no elements in the input collection, it returns 0.</li><li><code>Mean.perKey()</code> returns a transform that returns a collection that contains an output element mapping each distinct key in the input collection to the mean of the [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>mean</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Mean</span><span class=o>.</span><span class=na>globally</span><span class=o>());</span></code></pre></div></div></div><p><strong>Example 2</strong>: calculate the mean of the <code>Integers</code> associated with each uni [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/min/index.html b/website/generated-content/documentation/transforms/java/aggregation/min/index.html
index 5fd02d9d4a9..e8797fae015 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/min/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/min/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Provides a variety of different transforms for computing the minimum
 values in a collection, either globally or for each key.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/max>Max</a>
 for computing maximum values in a collection</li><li><a href=/documentation/transforms/java/aggregation/mean>Mean</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/sample/index.html b/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
index 0310e2613f7..94904518f22 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for taking samples of the elements in a collection, or
 samples of the values associated with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/top>Top</a>
 finds the largest (or smallest) set of elements in a collection</li><li><a href=/documentation/transforms/java/aggregation/latest>Latest</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/sum/index.html b/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
index e59adb4ef87..2538570f9c4 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for computing the sum of the elements in a collection, or the sum of the
 values associated with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: get the sum of a <code>PCollection</code> of <code>Doubles</code>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>< [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>sum</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Sum</span><span class=o>.</span><span class=na>doublesGlobally</span><span class=o>());</span></code></pre></div></div></div><p>Example 2: calculate the sum of the <code>Integers</code> associated with each unique key (whic [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/top/index.html b/website/generated-content/documentation/transforms/java/aggregation/top/index.html
index e0345a87771..a4c7cf327d9 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/top/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/top/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for finding the largest (or smallest) set of elements in
 a collection, or the largest (or smallest) set of values associated
 with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/sample>Sample</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/filter/index.html b/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
index 82287f79df9..ffc4120d676 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Given a predicate, filter out all elements that don&rsquo;t satisfy that predicate.
 May also be used to filter based on an inequality with a given value based
 on the natural ordering of the element.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: Filtering with a predicate</p><p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span cla [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html b/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
index 3cb2d35f5b1..84a7b623829 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Applies a simple 1-to-many mapping function over each element in the
 collection. The many elements are flattened into the resulting collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/filter>Filter</a> is useful if the function is just
 deciding whether to output an element or not.</li><li><a href=/documentation/transforms/java/elementwise/pardo>ParDo</a> is the most general element-wise mapping
diff --git a/website/generated-content/documentation/transforms/java/elementwise/keys/index.html b/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
index 05a266860ab..5323718f986 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Takes a collection of key-value pairs, and returns the key of each element.</p><h2 id=examples>Examples</h2><p><strong>Example</strong></p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span>< [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>keys</span> <span class=o>=</span> <span class=n>keyValuePairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Keys</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div></div></div><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/e [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html b/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
index a8f58359317..df6ba131a3c 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Takes a collection of key-value pairs and returns a collection of key-value pairs which has each key and value swapped.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java dat [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;&gt;</span> <span class=n>intStrPairs</span> <span class=o>=</span> <span class=n>strIntPairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>KvSwap</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html b/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
index dd757650ee0..6c940f6be97 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Applies a simple 1-to-1 mapping function over each element in the collection.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: providing the mapping function using a <code>SimpleFunction</code></p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><c [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>lineLengths</span> <span class=o>=</span> <span class=n>lines</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>MapElements</span><span class=o>.</span><span class=na>via</span><span class=o>(</span>
     <span class=k>new</span> <span class=n>SimpleFunction</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Integer</span><span class=o>&gt;()</span> <span class=o>{</span>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html b/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
index c941bcf0300..34e12866921 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>A transform for generic parallel processing. A <code>ParDo</code> transform considers each
 element in the input <code>PCollection</code>, performs some processing function
 (your user code) on that element, and emits zero or more elements to
diff --git a/website/generated-content/documentation/transforms/java/elementwise/partition/index.html b/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
index 1ff287278f8..c8471991b15 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Separates elements in a collection into multiple output collections. The partitioning function contains the logic that determines how to separate the elements of the input collection into each resulting partition output collection.</p><p>The number of partitions must be determined at graph construction time. You cannot determine the number of partitions in mid-pipeline.</p><p>See more information in the <a href=/documentation/programming-guide/#partition>Bea [...]
 </span><span class=c1>// partitioning function. In this example, we define the PartitionFn in-line. Returns a PCollectionList
 </span><span class=c1>// containing each of the resulting partitions as individual PCollection objects.
diff --git a/website/generated-content/documentation/transforms/java/elementwise/regex/index.html b/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
index 6a766cf497c..8973dd07964 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Provides a variety of functionality based on regular expressions.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></li></ul><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p c [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/reify/index.html b/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
index 9ccd4c9f2c6..a1b1f544114 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Transforms for converting between explicit and implicit form of various Beam values.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/withtimestamps>WithTimestamps</a>
 assigns timestamps to all the elements of a collection</li><li><a href=/documentation/transforms/java/other/window/>Window</a> divides up or
 groups the elements of a collection into finite windows</li></ul><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load-button><a href="mailto:dev@beam.apache.org?subject=Beam Website Feedback">SEND FEEDBACK</a></button></div></div></div><footer class=footer><div class=footer__contained><di [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html b/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
index d6e90975fa9..fc4e611a092 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>A variety of utility transforms for invoking the <code>toString()</code> method
 on every element in the input collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></li></ul><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/values/index.html b/website/generated-content/documentation/transforms/java/elementwise/values/index.html
index 317f07952d5..8e593ffd5a4 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/values/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/values/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>The <code>Values</code> transform takes a collection of key-value pairs, and
 returns the value of each element.</p><h2 id=examples>Examples</h2><p><strong>Example</strong></p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>values</span> <span class=o>=</span> <span class=n>keyValuePairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Values</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div></div></div><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/j [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html b/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
index 067c154d827..13d1c30cac2 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Takes a <code>PCollection&lt;V></code> and produces a <code>PCollection&lt;KV&lt;K, V>></code> by associating
 each input element with a key.</p><p>There are two versions of <code>WithKeys</code>, depending on how the key should be determined:</p><ul><li><code>WithKeys.of(SerializableFunction&lt;V, K> fn)</code> takes a function to
 compute the key from each value.</li><li><code>WithKeys.of(K key)</code> associates each value with the specified key.</li></ul><h2 id=examples>Examples</h2><p><strong>Example</strong><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCol [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html b/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
index 78ae3240f31..a469636d511 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Assigns timestamps to all the elements of a collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/reify>Reify</a></li></ul><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p class=description>Was i [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/other/create/index.html b/website/generated-content/documentation/transforms/java/other/create/index.html
index cb6f1286efc..a5a0879399b 100644
--- a/website/generated-content/documentation/transforms/java/other/create/index.html
+++ b/website/generated-content/documentation/transforms/java/other/create/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Creates a collection containing a specified set of elements. This is useful
 for testing, as well as creating an initial input to process in parallel.
 For example, a single element to execute a one-time <code>ParDo</code> or a list of filenames to be read.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><p>N/A</p><div class=feedback><p class=update>Last updated on 2020/08/14</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you wou [...]
diff --git a/website/generated-content/documentation/transforms/java/other/flatten/index.html b/website/generated-content/documentation/transforms/java/other/flatten/index.html
index 32fa7cb069a..5fdbddfc881 100644
--- a/website/generated-content/documentation/transforms/java/other/flatten/index.html
+++ b/website/generated-content/documentation/transforms/java/other/flatten/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Merges multiple <code>PCollection</code> objects into a single logical <code>PCollection</code>.</p><p>By default, the coder for the output <code>PCollection</code> is the same as the coder
 for the first <code>PCollection</code> in the input <code>PCollectionList</code>. However, the
 input <code>PCollection</code> objects can each use different coders, as long as
diff --git a/website/generated-content/documentation/transforms/java/other/passert/index.html b/website/generated-content/documentation/transforms/java/other/passert/index.html
index ae82d77d2e1..2189db53a7d 100644
--- a/website/generated-content/documentation/transforms/java/other/passert/index.html
+++ b/website/generated-content/documentation/transforms/java/other/passert/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p><code>PAssert</code> is a class included in the Beam Java SDK that is an
 assertion on the contents of a <code>PCollection</code>. You can use <code>PAssert</code> to verify
 that a <code>PCollection</code> contains a specific set of expected elements.</p><h2 id=examples>Examples</h2><p>For a given <code>PCollection</code>, you can use <code>PAssert</code> to verify the contents as follows:<div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java [...]
diff --git a/website/generated-content/documentation/transforms/java/other/view/index.html b/website/generated-content/documentation/transforms/java/other/view/index.html
index 166803e0fdb..abdc5d86d5e 100644
--- a/website/generated-content/documentation/transforms/java/other/view/index.html
+++ b/website/generated-content/documentation/transforms/java/other/view/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Operations for turning a collection into view that may be used as a side-input to a <code>ParDo</code>.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/pardo>ParDo</a></li><li><a href=/documentation/transforms/java/aggregation/combinewithcontext>CombineWithContext</a></li></ul [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/other/window/index.html b/website/generated-content/documentation/transforms/java/other/window/index.html
index bb5c5f840fb..d39b69e7d48 100644
--- a/website/generated-content/documentation/transforms/java/other/window/index.html
+++ b/website/generated-content/documentation/transforms/java/other/window/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Javadoc</a></table><br><br><p>Logically divides up or groups the elements of a collection into finite
 windows according to a function.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/reify>Reify</a>
 converts between explicit and implicit form of various Beam values.</li><li><a href=/documentation/transforms/java/elementwise/withtimestamps>WithTimestamps</a>
diff --git a/website/generated-content/documentation/transforms/java/overview/index.html b/website/generated-content/documentation/transforms/java/overview/index.html
index 7ccc8a4c397..a9d6c47dfa4 100644
--- a/website/generated-content/documentation/transforms/java/overview/index.html
+++ b/website/generated-content/documentation/transforms/java/overview/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 outputs all resulting elements.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/keys>Keys</a></td><td>Extracts the key from each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/kvswap>KvSwap</a></td><td>Swaps the key and value of each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></td><td>Applies a function to eve [...]
 in the input collection.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/partition>Partition</a></td><td>Routes each input element to a specific output collection based on some partition
 function.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/regex>Regex</a></td><td>Filters input string elements based on a regex. May also transform them based on the matching groups.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/reify>Reify</a></td><td>Transforms for converting between explicit and implicit form of various Beam values.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/tostring>ToString</a></td><td>Transforms ev [...]
diff --git a/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html b/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
index 3428d8679da..38072fc15b7 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html b/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
index 14b075b77af..892808e2013 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html b/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
index 4190d7c4c58..edac831d8f1 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Aggregates all input elements by their key and allows downstream processing
 to consume all values associated with the key. While <code>GroupByKey</code> performs
 this operation over a single input collection and thus a single type of input
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html b/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
index b051e231c4f..7f8eaaf8e45 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines all elements in a collection.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombineGlobally</code> in multiple ways to combine all the elements in the <code>PCollection</code>.</p><p><code>CombineGlobally</code> accepts a function that takes an <code>iterable</code> of elements as an input, and combines them to return a single element.</p><h3 id=example-1-combining-with-a-function>Example 1: Combining with a function</h3><p>We define a function <code>get_common_items</code> which takes an <code>iterable</code> of sets as an input, and calcul [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html b/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
index d65ccbe18d5..47dc7f75c6a 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines all elements for each key in a collection.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombinePerKey</code> in multiple ways to combine all the elements in the <code>PCollection</code>.</p><p><code>CombinePerKey</code> accepts a function that takes a list of values as an input, and combines them for each key.</p><h3 id=example-1-combining-with-a-predefined-function>Example 1: Combining with a predefined function</h3><p>We use the function
 <a href=https://docs.python.org/3/library/functions.html#sum><code>sum</code></a>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html b/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
index 9be6624a524..f3f29b568e6 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines an iterable of values in a keyed collection of elements.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombineValues</code> in multiple ways to combine the keyed values in the <code>PCollection</code>.</p><p><code>CombineValues</code> accepts a function that takes an <code>iterable</code> of elements as an input, and combines them to return a single element.
 <code>CombineValues</code> expects a keyed <code>PCollection</code> of elements, where the value is an iterable of elements to be combined.</p><h3 id=example-1-combining-with-a-predefined-function>Example 1: Combining with a predefined function</h3><p>We use the function
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html b/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
index 6a9e1538105..fa06bc59777 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/count/index.html b/website/generated-content/documentation/transforms/python/aggregation/count/index.html
index 36b1d9f89d0..d075d36e4ab 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/count/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/count/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Counts the number of elements within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with two <code>PCollection</code>s of produce.
 Then, we apply <code>Count</code> to get the total number of elements in different ways.</p><h3 id=example-1-counting-all-elements-in-a-pcollection>Example 1: Counting all elements in a PCollection</h3><p>We use <code>Count.Globally()</code> to count <em>all</em> elements in a <code>PCollection</code>, even if there are duplicate elements.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bott [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html b/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
index 599849fe274..30d8e8bbb94 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Produces a collection containing distinct elements of the input collection.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with two <code>PCollection</code>s of produce.</p><p>We use <code>Distinct</code> to get rid of duplicate elements, which outputs a <code>PCollection</code> of all the unique elements.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button  [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
index 09a844dd932..9fb7eb7a60d 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of elements and produces a collection grouped,
 by properties of those elements.</p><p>Unlike <code>GroupByKey</code>, the key is dynamically created from the elements themselves.</p><h2 id=grouping-examples>Grouping Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of fruits.</p><p>We use <code>GroupBy</code> to group all fruits by the first letter of their name.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip  [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>with</span> <span class=n>beam</span><span class=o>.</span><span class=n>Pipeline</span><span class=p>()</span> <span class=k>as</span> <span class=n>p</span><span class=p>:</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
index 376df1c582c..56c7533f9bc 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a keyed collection of elements and produces a collection
 where each element consists of a key and all values associated with that key.</p><p>See more information in the <a href=/documentation/programming-guide/#groupbykey>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of produce keyed by season.</p><p>We use <code>GroupByKey</code> to group all the produce for each season.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
index 85b3fde3f0c..605fd180032 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Batches the input into desired batch size.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of produce by season.</p><p>We use <code>GroupIntoBatches</code> to get fixed-sized batches for every key, which outputs a list of elements for every key.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs- [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/latest/index.html b/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
index 355d14407a7..a78d0491bf7 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the latest timestamp.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with a timestamp for their harvest date.</p><p>We use <code>Latest</code> to get the element with the latest timestamp from the <code>PCollection</code>.</p><h3 id=example-1-latest-element-globally>Example 1: Latest element globally</h3><p>We use <code>Latest.Globally()</code>  [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 <span class=kn>import</span> <span class=nn>time</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/max/index.html b/website/generated-content/documentation/transforms/python/aggregation/max/index.html
index f2754060bef..1ba93bcf03a 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/max/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/max/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the maximum value within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the element with the maximum value in different ways.</p><h3 id=example-1-maximum-element-in-a-pcollection>Example 1: Maximum element in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get the maximum element from the <em>entire</em> <code>PCollection</code>.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="View source code" href=https://github.com/ap [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/mean/index.html b/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
index 160b5cbd9ba..6867350b0be 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for computing the arithmetic mean of the elements in a collection,
 or the mean of the values associated with each key in a collection of
 key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/aggregation/min/index.html b/website/generated-content/documentation/transforms/python/aggregation/min/index.html
index 8d2add419af..15614f34cc9 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/min/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/min/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the minimum value within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the element with the minimum value in different ways.</p><h3 id=example-1-minimum-element-in-a-pcollection>Example 1: Minimum element in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get the minimum element from the <em>entire</em> <code>PCollection</code>.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="View source code" href=https://github.com/ap [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/sample/index.html b/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
index 755d76f78c3..cc5a48dceb4 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for taking samples of the elements in a collection, or
 samples of the values associated with each key in a collection of
 key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/aggregation/sum/index.html b/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
index 342029d078f..871a2261826 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Sums all the elements within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the sum of all the element values in different ways.</p><h3 id=example-1-sum-of-the-elements-in-a-pcollection>Example 1: Sum of the elements in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get sum of all the element values from the <em>entire</em> <code>PCollection</code>.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="View source code" href=http [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/top/index.html b/website/generated-content/documentation/transforms/python/aggregation/top/index.html
index 92c5da4b40a..72644c67695 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/top/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/top/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for finding the largest (or smallest) set of elements in
 a collection, or the largest (or smallest) set of values associated
 with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/elementwise/filter/index.html b/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
index b6fb470eb4d..d79330c433f 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Given a predicate, filter out all elements that don&rsquo;t satisfy that predicate.
 May also be used to filter based on an inequality with a given value based
 on the comparison ordering of the element.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
diff --git a/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html b/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
index 627d6a3fad5..e0c4b4a6f35 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Applies a simple 1-to-many mapping function over each element in the collection.
 The many elements are flattened into the resulting collection.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
 Then, we apply <code>FlatMap</code> in multiple ways to yield zero or more elements per each input element into the resulting <code>PCollection</code>.</p><p><code>FlatMap</code> accepts a function that returns an <code>iterable</code>,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/keys/index.html b/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
index fefaf44dcc5..e31349f61bd 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs and returns the key of each element.</p><h2 id=example>Example</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>Keys</code> to extract the keys and discard the values.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Run code" href=https://colab.research.google.com/github/apache/beam/blob/master/examples/notebooks/documentation/transforms/python/elementwise/keys-py.ipynb><img src=/images/run-icon.svg></a>
 <a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="View source code" href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/transforms/elementwise/keys.py><img src=/images/code-icon.svg></a>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html b/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
index 9df86c0ffa9..8fb0deb9287 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs and returns a collection of key-value pairs
 which has each key and value swapped.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>KvSwap</code> to swap the keys and values.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Run code" href=https://colab.research.google.com/github/apache/beam/blob/master/examples/notebooks/documentation/transforms/python/elementwise/kvswap-py.ipynb><img src=/images/run-icon.svg></a>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/map/index.html b/website/generated-content/documentation/transforms/python/elementwise/map/index.html
index e0309b3b021..ba8eb573750 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/map/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/map/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Applies a simple 1-to-1 mapping function over each element in the collection.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
 Then, we apply <code>Map</code> in multiple ways to transform every element in the <code>PCollection</code>.</p><p><code>Map</code> accepts a function that returns a single element for every input element in the <code>PCollection</code>.</p><h3 id=example-1-map-with-a-predefined-function>Example 1: Map with a predefined function</h3><p>We use the function <code>str.strip</code> which takes a single <code>str</code> element and outputs a <code>str</code>.
 It strips the input element&rsquo;s whitespaces, including newlines and tabs.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Run code" href=https://colab.research.google.com/github/apache/beam/blob/master/examples/notebooks/documentation/transforms/python/elementwise/map-py.ipynb><img src=/images/run-icon.svg></a>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html b/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
index 25fab4cb895..c06a694d73c 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>A transform for generic parallel processing.
 A <code>ParDo</code> transform considers each element in the input <code>PCollection</code>,
 performs some processing function (your user code) on that element,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/partition/index.html b/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
index bbcc53d8157..76b570f68e5 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Separates elements in a collection into multiple output
 collections. The partitioning function contains the logic that determines how
 to separate the elements of the input collection into each resulting
diff --git a/website/generated-content/documentation/transforms/python/elementwise/regex/index.html b/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
index e3c9aebbd60..181fb251e1c 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Filters input string elements based on a regex. May also transform them based on the matching groups.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of text strings.
 Then, we use the <code>Regex</code> transform to search, replace, and split through the text elements using
 <a href=https://docs.python.org/3/library/re.html>regular expressions</a>.</p><p>You can use tools to help you create and test your regular expressions, such as
diff --git a/website/generated-content/documentation/transforms/python/elementwise/reify/index.html b/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
index 6e20c559ee6..fb24954aaf5 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/elementwise/runinference/index.html b/website/generated-content/documentation/transforms/python/elementwise/runinference/index.html
index 188a2f54d4b..92419760ef6 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/runinference/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/runinference/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Uses models to do local and remote inference. A <code>RunInference</code> transform performs inference on a <code>PCollection</code> of examples using a machine learning (ML) model. The transform outputs a <code>PCollection</code> that contains the input examples and output predictions.</p><p>You must have Apache Beam 2.40.0 or later installed to run these pipelines.</p><p>See more <a href=https://github.com/apache/beam/tree/master/sdks/python/ [...]
 <a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 <span class=kn>import</span> <span class=nn>numpy</span>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html b/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
index b1e60e3ae94..b806160b54b 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms every element in an input collection to a string.</p><h2 id=examples>Examples</h2><p>Any non-string element can be converted to a string using standard Python functions and methods.
 Many I/O transforms, such as
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.io.textio.html#apache_beam.io.textio.WriteToText><code>textio.WriteToText</code></a>,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/values/index.html b/website/generated-content/documentation/transforms/python/elementwise/values/index.html
index 6385629c2e5..01ee5054f66 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/values/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/values/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs, and returns the value of each element.</p><h2 id=example>Example</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>Values</code> to extract the values and discard the keys.</p><div class="language-py snippet"><div class="notebook-skip code-snippet"><a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Run code" href=https://colab.research.google.com/github/apache/beam/blob/master/examples/notebooks/documentation/transforms/python/elementwise/values-py.ipynb><img src=/images/run-icon.svg></a>
 <a target=_blank type=button data-bs-toggle=tooltip data-bs-placement=bottom title="View source code" href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/transforms/elementwise/values.py><img src=/images/code-icon.svg></a>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html b/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
index 53430abaa67..2700678f8ea 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html b/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
index 06b93efeada..50adb802112 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 When windowing and late data play an important role in streaming pipelines, timestamps are especially useful.</p><h3 id=example-1-timestamp-by-event-time>Example 1: Timestamp by event time</h3><p>The elements themselves often already contain a timestamp field.
 <code>beam.window.TimestampedValue</code> takes a value and a
 <a href=https://en.wikipedia.org/wiki/Unix_time>Unix timestamp</a>
diff --git a/website/generated-content/documentation/transforms/python/other/create/index.html b/website/generated-content/documentation/transforms/python/other/create/index.html
index 0ad5d7a5728..0536af6fcb7 100644
--- a/website/generated-content/documentation/transforms/python/other/create/index.html
+++ b/website/generated-content/documentation/transforms/python/other/create/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></table><br><br><p>Creates a collection containing a specified set of elements. This is
 useful for testing, as well as creating an initial input to process
 in parallel. For example, a single element to execute a one-time
diff --git a/website/generated-content/documentation/transforms/python/other/flatten/index.html b/website/generated-content/documentation/transforms/python/other/flatten/index.html
index df79d234831..f26be64db4c 100644
--- a/website/generated-content/documentation/transforms/python/other/flatten/index.html
+++ b/website/generated-content/documentation/transforms/python/other/flatten/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></table><br><br><p>Merges multiple <code>PCollection</code> objects into a single logical
 <code>PCollection</code>. A transform for <code>PCollection</code> objects
 that store the same data type.</p><p>See more information in the <a href=/documentation/programming-guide/#flatten>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>See <a href=https://github.com/apache/beam/issues/19498>Issue 19498</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/python/elementwise/flatmap>FlatMap</a> applies a simple 1-to-many mapping
diff --git a/website/generated-content/documentation/transforms/python/other/passert/index.html b/website/generated-content/documentation/transforms/python/other/passert/index.html
index ce8a4603db6..a87bf57c583 100644
--- a/website/generated-content/documentation/transforms/python/other/passert/index.html
+++ b/website/generated-content/documentation/transforms/python/other/passert/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/other/reshuffle/index.html b/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
index 98a68361b51..c16932fff72 100644
--- a/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
+++ b/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></table><br><br><p>Adds a temporary random key to each element in a collection, reshuffles
 these keys, and removes the temporary key. This redistributes the
 elements between workers and returns a collection equivalent to its
diff --git a/website/generated-content/documentation/transforms/python/other/view/index.html b/website/generated-content/documentation/transforms/python/other/view/index.html
index 59a0718b86c..5d29fe8c5ca 100644
--- a/website/generated-content/documentation/transforms/python/other/view/index.html
+++ b/website/generated-content/documentation/transforms/python/other/view/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/other/windowinto/index.html b/website/generated-content/documentation/transforms/python/other/windowinto/index.html
index c5f2075954e..a3dc815a42d 100644
--- a/website/generated-content/documentation/transforms/python/other/windowinto/index.html
+++ b/website/generated-content/documentation/transforms/python/other/windowinto/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 Pydoc</a></table><br><br><p>Logically divides up or groups the elements of a collection into finite
 windows according to a function.</p><h2 id=examples>Examples</h2><p>See <a href=https://github.com/apache/beam/issues/19498>Issue 19498</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/python/aggregation/groupbykey>GroupByKey</a>
 produces a collection where each element consists of a key and all values associated
diff --git a/website/generated-content/documentation/transforms/python/overview/index.html b/website/generated-content/documentation/transforms/python/overview/index.html
index 3a4a7627942..406c54054a5 100644
--- a/website/generated-content/documentation/transforms/python/overview/index.html
+++ b/website/generated-content/documentation/transforms/python/overview/index.html
@@ -19,7 +19,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li class=section-nav-item--collapsible><span class=section-nav-lis [...]
 outputs all resulting elements.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/keys>Keys</a></td><td>Extracts the key from each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/kvswap>KvSwap</a></td><td>Swaps the key and value of each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/map>Map</a></td><td>Applies a function to every element [...]
 in the input collection.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/partition>Partition</a></td><td>Routes each input element to a specific output collection based on some partition
 function.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/regex>Regex</a></td><td>Filters input string elements based on a regex. May also transform them based on the matching groups.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/reify>Reify</a></td><td>Transforms for converting between explicit and implicit form of various Beam values.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/runinference>RunInference</a></td><td [...]
diff --git a/website/generated-content/sitemap.xml b/website/generated-content/sitemap.xml
index 3f6d8876e03..537d8579c56 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/apacheplayground/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/blog/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/categories/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/b [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/apacheplayground/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/blog/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/categories/</loc><lastmod>2022-12-01T11:37:53-05:00</lastmod></url><url><loc>/b [...]
\ No newline at end of file