blob: 4ef7b79db8cbaa74a2a4cdf4470c5187bddc9507 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>apache_beam.runners.interactive.pipeline_instrument module &mdash; Apache Beam documentation</title>
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="apache_beam.runners.interactive.recording_manager module" href="apache_beam.runners.interactive.recording_manager.html" />
<link rel="prev" title="apache_beam.runners.interactive.pipeline_fragment module" href="apache_beam.runners.interactive.pipeline_fragment.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Apache Beam
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="apache_beam.coders.html">apache_beam.coders package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.dataframe.html">apache_beam.dataframe package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.io.html">apache_beam.io package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.metrics.html">apache_beam.metrics package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.ml.html">apache_beam.ml package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.options.html">apache_beam.options package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.portability.html">apache_beam.portability package</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="apache_beam.runners.html">apache_beam.runners package</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="apache_beam.runners.html#subpackages">Subpackages</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="apache_beam.runners.dataflow.html">apache_beam.runners.dataflow package</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.runners.direct.html">apache_beam.runners.direct package</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="apache_beam.runners.interactive.html">apache_beam.runners.interactive package</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="apache_beam.runners.interactive.html#subpackages">Subpackages</a></li>
<li class="toctree-l4 current"><a class="reference internal" href="apache_beam.runners.interactive.html#submodules">Submodules</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.runners.job.html">apache_beam.runners.job package</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="apache_beam.runners.html#submodules">Submodules</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.transforms.html">apache_beam.transforms package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.typehints.html">apache_beam.typehints package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.utils.html">apache_beam.utils package</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.error.html">apache_beam.error module</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.pipeline.html">apache_beam.pipeline module</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.pvalue.html">apache_beam.pvalue module</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Apache Beam</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li><a href="apache_beam.runners.html">apache_beam.runners package</a> &raquo;</li>
<li><a href="apache_beam.runners.interactive.html">apache_beam.runners.interactive package</a> &raquo;</li>
<li>apache_beam.runners.interactive.pipeline_instrument module</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/apache_beam.runners.interactive.pipeline_instrument.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="module-apache_beam.runners.interactive.pipeline_instrument">
<span id="apache-beam-runners-interactive-pipeline-instrument-module"></span><h1>apache_beam.runners.interactive.pipeline_instrument module<a class="headerlink" href="#module-apache_beam.runners.interactive.pipeline_instrument" title="Permalink to this headline"></a></h1>
<p>Module to instrument interactivity to the given pipeline.</p>
<p>For internal use only; no backwards-compatibility guarantees.
This module accesses current interactive environment and analyzes given pipeline
to transform original pipeline into a one-shot pipeline with interactivity.</p>
<dl class="class">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument">
<em class="property">class </em><code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">PipelineInstrument</code><span class="sig-paren">(</span><em>pipeline</em>, <em>options=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/3/library/functions.html#object" title="(in Python v3.9)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<p>A pipeline instrument for pipeline to be executed by interactive runner.</p>
<p>This module should never depend on underlying runner that interactive runner
delegates. It instruments the original instance of pipeline directly by
appending or replacing transforms with help of cache. It provides
interfaces to recover states of original pipeline. It’s the interactive
runner’s responsibility to coordinate supported underlying runners to run
the pipeline instrumented and recover the original pipeline states if needed.</p>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.instrumented_pipeline_proto">
<code class="descname">instrumented_pipeline_proto</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.instrumented_pipeline_proto"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.instrumented_pipeline_proto" title="Permalink to this definition"></a></dt>
<dd><p>Always returns a new instance of portable instrumented proto.</p>
</dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.prune_subgraph_for">
<code class="descname">prune_subgraph_for</code><span class="sig-paren">(</span><em>pipeline</em>, <em>required_transform_ids</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.prune_subgraph_for"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.prune_subgraph_for" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.background_caching_pipeline_proto">
<code class="descname">background_caching_pipeline_proto</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.background_caching_pipeline_proto"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.background_caching_pipeline_proto" title="Permalink to this definition"></a></dt>
<dd><p>Returns the background caching pipeline.</p>
<p>This method creates a background caching pipeline by: adding writes to cache
from each unbounded source (done in the instrument method), and cutting out
all components (transform, PCollections, coders, windowing strategies) that
are not the unbounded sources or writes to cache (or subtransforms thereof).</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.has_unbounded_sources">
<code class="descname">has_unbounded_sources</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.has_unbounded_sources" title="Permalink to this definition"></a></dt>
<dd><p>Returns whether the pipeline has any recordable sources.</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cacheables">
<code class="descname">cacheables</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cacheables" title="Permalink to this definition"></a></dt>
<dd><p>Finds cacheable PCollections from the pipeline.</p>
<p>The function only treats the result as cacheables since there is no
guarantee whether PCollections that need to be cached have been cached or
not. A PCollection needs to be cached when it’s bound to a user defined
variable in the source code. Otherwise, the PCollection is not reusable
nor introspectable which nullifies the need of cache.</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.pcolls_to_pcoll_id">
<code class="descname">pcolls_to_pcoll_id</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.pcolls_to_pcoll_id" title="Permalink to this definition"></a></dt>
<dd><p>Returns a dict mapping str(PCollection)s to IDs.</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.original_pipeline_proto">
<code class="descname">original_pipeline_proto</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.original_pipeline_proto" title="Permalink to this definition"></a></dt>
<dd><p>Returns a snapshot of the pipeline proto before instrumentation.</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.user_pipeline">
<code class="descname">user_pipeline</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.user_pipeline" title="Permalink to this definition"></a></dt>
<dd><p>Returns a reference to the pipeline instance defined by the user. If a
pipeline has no cacheable PCollection and the user pipeline cannot be
found, return None indicating there is nothing to be cached in the user
pipeline.</p>
<p>The pipeline given for instrumenting and mutated in this class is not
necessarily the pipeline instance defined by the user. From the watched
scopes, this class figures out what the user pipeline instance is.
This metadata can be used for tracking pipeline results.</p>
</dd></dl>
<dl class="attribute">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.runner_pcoll_to_user_pcoll">
<code class="descname">runner_pcoll_to_user_pcoll</code><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.runner_pcoll_to_user_pcoll" title="Permalink to this definition"></a></dt>
<dd><p>Returns cacheable PCollections correlated from instances in the runner
pipeline to instances in the user pipeline.</p>
</dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.instrument">
<code class="descname">instrument</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.instrument"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.instrument" title="Permalink to this definition"></a></dt>
<dd><p>Instruments original pipeline with cache.</p>
<p>For cacheable output PCollection, if cache for the key doesn’t exist, do
_write_cache(); for cacheable input PCollection, if cache for the key
exists, do _read_cache(). No instrument in any other situation.</p>
<dl class="docutils">
<dt>Modifies:</dt>
<dd>self._pipeline</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.preprocess">
<code class="descname">preprocess</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.preprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.preprocess" title="Permalink to this definition"></a></dt>
<dd><p>Pre-processes the pipeline.</p>
<p>Since the pipeline instance in the class might not be the same instance
defined in the user code, the pre-process will figure out the relationship
of cacheable PCollections between these 2 instances by replacing ‘pcoll’
fields in the cacheable dictionary with ones from the running instance.</p>
</dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cache_key">
<code class="descname">cache_key</code><span class="sig-paren">(</span><em>pcoll</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.cache_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cache_key" title="Permalink to this definition"></a></dt>
<dd><p>Gets the identifier of a cacheable PCollection in cache.</p>
<p>If the pcoll is not a cacheable, return ‘’.
The key is what the pcoll would use as identifier if it’s materialized in
cache. It doesn’t mean that there would definitely be such cache already.
Also, the pcoll can come from the original user defined pipeline object or
an equivalent pcoll from a transformed copy of the original pipeline.</p>
<p>‘pcoll_id’ of cacheable is not stable for cache_key, thus not included in
cache key. A combination of ‘var’, ‘version’ and ‘producer_version’ is
sufficient to identify a cached PCollection.</p>
</dd></dl>
<dl class="method">
<dt id="apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cacheable_var_by_pcoll_id">
<code class="descname">cacheable_var_by_pcoll_id</code><span class="sig-paren">(</span><em>pcoll_id</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#PipelineInstrument.cacheable_var_by_pcoll_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.PipelineInstrument.cacheable_var_by_pcoll_id" title="Permalink to this definition"></a></dt>
<dd><p>Retrieves the variable name of a PCollection.</p>
<p>In source code, PCollection variables are defined in the user pipeline. When
it’s converted to the runner api representation, each PCollection referenced
in the user pipeline is assigned a unique-within-pipeline pcoll_id. Given
such pcoll_id, retrieves the str variable name defined in user pipeline for
that referenced PCollection. If the PCollection is not watched, return None.</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.build_pipeline_instrument">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">build_pipeline_instrument</code><span class="sig-paren">(</span><em>pipeline</em>, <em>options=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#build_pipeline_instrument"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.build_pipeline_instrument" title="Permalink to this definition"></a></dt>
<dd><p>Creates PipelineInstrument for a pipeline and its options with cache.</p>
<p>Throughout the process, the returned PipelineInstrument snapshots the given
pipeline and then mutates the pipeline. It’s invoked by interactive components
such as the InteractiveRunner and the given pipeline should be implicitly
created runner pipelines instead of pipeline instances defined by the user.</p>
<p>This is the shorthand for doing 3 steps: 1) compute once for metadata of the
given runner pipeline and everything watched from user pipelines; 2) associate
info between the runner pipeline and its corresponding user pipeline,
eliminate data from other user pipelines if there are any; 3) mutate the
runner pipeline to apply interactivity.</p>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.cacheables">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">cacheables</code><span class="sig-paren">(</span><em>pcolls_to_pcoll_id</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#cacheables"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.cacheables" title="Permalink to this definition"></a></dt>
<dd><p>Finds PCollections that need to be cached for analyzed PCollections.</p>
<p>The function only treats the result as cacheables since there is no guarantee
whether PCollections that need to be cached have been cached or not. A
PCollection needs to be cached when it’s bound to a user defined variable in
the source code. Otherwise, the PCollection is not reusable nor introspectable
which nullifies the need of cache. There might be multiple pipelines defined
and watched, this will only return for PCollections with pcolls_to_pcoll_id
analyzed. The check is not strict because pcoll_id is not unique across
multiple pipelines. Additional check needs to be done during instrument.</p>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.cacheable_key">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">cacheable_key</code><span class="sig-paren">(</span><em>pcoll</em>, <em>pcolls_to_pcoll_id</em>, <em>pcoll_version_map=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#cacheable_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.cacheable_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.has_unbounded_sources">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">has_unbounded_sources</code><span class="sig-paren">(</span><em>pipeline</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#has_unbounded_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.has_unbounded_sources" title="Permalink to this definition"></a></dt>
<dd><p>Checks if a given pipeline has recordable sources.</p>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.unbounded_sources">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">unbounded_sources</code><span class="sig-paren">(</span><em>pipeline</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#unbounded_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.unbounded_sources" title="Permalink to this definition"></a></dt>
<dd><p>Returns a pipeline’s recordable sources.</p>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.pcolls_to_pcoll_id">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">pcolls_to_pcoll_id</code><span class="sig-paren">(</span><em>pipeline</em>, <em>original_context</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#pcolls_to_pcoll_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.pcolls_to_pcoll_id" title="Permalink to this definition"></a></dt>
<dd><p>Returns a dict mapping PCollections string to PCollection IDs.</p>
<p>Using a PipelineVisitor to iterate over every node in the pipeline,
records the mapping from PCollections to PCollections IDs. This mapping
will be used to query cached PCollections.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">(dict from str to str) a dict mapping str(pcoll) to pcoll_id.</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="function">
<dt id="apache_beam.runners.interactive.pipeline_instrument.watch_sources">
<code class="descclassname">apache_beam.runners.interactive.pipeline_instrument.</code><code class="descname">watch_sources</code><span class="sig-paren">(</span><em>pipeline</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/runners/interactive/pipeline_instrument.html#watch_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.runners.interactive.pipeline_instrument.watch_sources" title="Permalink to this definition"></a></dt>
<dd><p>Watches the unbounded sources in the pipeline.</p>
<p>Sources can output to a PCollection without a user variable reference. In
this case the source is not cached. We still want to cache the data so we
synthetically create a variable to the intermediate PCollection.</p>
</dd></dl>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="apache_beam.runners.interactive.recording_manager.html" class="btn btn-neutral float-right" title="apache_beam.runners.interactive.recording_manager module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="apache_beam.runners.interactive.pipeline_fragment.html" class="btn btn-neutral float-left" title="apache_beam.runners.interactive.pipeline_fragment module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>