| <!DOCTYPE html> |
| |
| <html lang="en" data-content_root="./"> |
| <head> |
| <meta charset="utf-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> |
| |
| <title>Working with the C++ Implementation — Apache Arrow C++ Cookbook documentation</title> |
| <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> |
| <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=39aeeac0" /> |
| <script src="_static/documentation_options.js?v=5929fcd5"></script> |
| <script src="_static/doctools.js?v=888ff710"></script> |
| <script src="_static/sphinx_highlight.js?v=dc90522c"></script> |
| <link rel="icon" href="_static/favicon.ico"/> |
| <link rel="index" title="Index" href="genindex.html" /> |
| <link rel="search" title="Search" href="search.html" /> |
| <link rel="next" title="Creating Arrow Objects" href="create.html" /> |
| <link rel="prev" title="Apache Arrow C++ Cookbook" href="index.html" /> |
| |
| |
| <link rel="stylesheet" href="_static/custom.css" type="text/css" /> |
| |
| |
| <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> |
| <!-- Matomo --> |
| <script> |
| var _paq = window._paq = window._paq || []; |
| /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ |
| /* We explicitly disable cookie tracking to avoid privacy issues */ |
| _paq.push(['disableCookies']); |
| _paq.push(['trackPageView']); |
| _paq.push(['enableLinkTracking']); |
| (function() { |
| var u="https://analytics.apache.org/"; |
| _paq.push(['setTrackerUrl', u+'matomo.php']); |
| _paq.push(['setSiteId', '20']); |
| var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; |
| g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); |
| })(); |
| </script> |
| <!-- End Matomo Code --> |
| |
| </head><body> |
| |
| |
| <div class="document"> |
| <div class="documentwrapper"> |
| <div class="bodywrapper"> |
| |
| |
| <div class="body" role="main"> |
| |
| <section id="working-with-the-c-implementation"> |
| <h1><a class="toc-backref" href="#id7" role="doc-backlink">Working with the C++ Implementation</a><a class="headerlink" href="#working-with-the-c-implementation" title="Link to this heading">¶</a></h1> |
| <p>This section of the cookbook goes over basic concepts |
| that will be needed regardless of how you intend to use |
| the Arrow C++ implementation.</p> |
| <nav class="contents" id="contents"> |
| <p class="topic-title">Contents</p> |
| <ul class="simple"> |
| <li><p><a class="reference internal" href="#working-with-the-c-implementation" id="id7">Working with the C++ Implementation</a></p> |
| <ul> |
| <li><p><a class="reference internal" href="#working-with-status-and-result" id="id8">Working with Status and Result</a></p></li> |
| <li><p><a class="reference internal" href="#using-the-visitor-pattern" id="id9">Using the Visitor Pattern</a></p> |
| <ul> |
| <li><p><a class="reference internal" href="#generate-random-data" id="id10">Generate Random Data</a></p></li> |
| <li><p><a class="reference internal" href="#generalize-computations-across-arrow-types" id="id11">Generalize Computations Across Arrow Types</a></p></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </nav> |
| <section id="working-with-status-and-result"> |
| <h2><a class="toc-backref" href="#id8" role="doc-backlink">Working with Status and Result</a><a class="headerlink" href="#working-with-status-and-result" title="Link to this heading">¶</a></h2> |
| <p>C++ libraries often have to choose between throwing exceptions and |
| returning error codes. Arrow chooses to return Status and Result |
| objects as a middle ground. This makes it clear when a function |
| can fail and is easier to use than integer arrow codes.</p> |
| <p>It is important to always check the value of a returned Status object to |
| ensure that the operation succeeded. However, this can quickly become |
| tedious:</p> |
| <div class="literal-block-wrapper docutils container" id="id1"> |
| <div class="code-block-caption"><span class="caption-text">Checking the status of every function manually</span><a class="headerlink" href="#id1" title="Link to this code">¶</a></div> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="p">()</span><span class="o">></span><span class="w"> </span><span class="n">test_fn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[]</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">NullBuilder</span><span class="w"> </span><span class="n">builder</span><span class="p">;</span> |
| <span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">Reserve</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span> |
| <span class="w"> </span><span class="c1">// Tedious return value check</span> |
| <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">st</span><span class="p">.</span><span class="n">ok</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">st</span><span class="p">;</span> |
| <span class="w"> </span><span class="p">}</span> |
| <span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">AppendNulls</span><span class="p">(</span><span class="mi">-1</span><span class="p">);</span> |
| <span class="w"> </span><span class="c1">// Tedious return value check</span> |
| <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">st</span><span class="p">.</span><span class="n">ok</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">st</span><span class="p">;</span> |
| <span class="w"> </span><span class="p">}</span> |
| <span class="w"> </span><span class="n">rout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Appended -1 null values?"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span> |
| <span class="p">};</span> |
| <span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">test_fn</span><span class="p">();</span> |
| <span class="n">rout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="literal-block-wrapper docutils container" id="id2"> |
| <div class="code-block-caption"><span class="caption-text">Code Output</span><a class="headerlink" href="#id2" title="Link to this code">¶</a></div> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Invalid</span><span class="p">:</span> <span class="n">length</span> <span class="n">must</span> <span class="n">be</span> <span class="n">positive</span> |
| </pre></div> |
| </div> |
| </div> |
| <p>The macro <a class="reference external" href="https://arrow.apache.org/docs/cpp/api/support.html#c.ARROW_RETURN_NOT_OK" title="(in Apache Arrow v14.0.1)"><code class="xref c c-macro docutils literal notranslate"><span class="pre">ARROW_RETURN_NOT_OK</span></code></a> will take care of some of this |
| boilerplate for you. It will run the contained expression and check the resulting |
| <code class="docutils literal notranslate"><span class="pre">Status</span></code> or <code class="docutils literal notranslate"><span class="pre">Result</span></code> object. If it failed then it will return the failure.</p> |
| <div class="literal-block-wrapper docutils container" id="id3"> |
| <div class="code-block-caption"><span class="caption-text">Using ARROW_RETURN_NOT_OK to check the status</span><a class="headerlink" href="#id3" title="Link to this code">¶</a></div> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="p">()</span><span class="o">></span><span class="w"> </span><span class="n">test_fn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[]</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">NullBuilder</span><span class="w"> </span><span class="n">builder</span><span class="p">;</span> |
| <span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="p">.</span><span class="n">Reserve</span><span class="p">(</span><span class="mi">2</span><span class="p">));</span> |
| <span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="p">.</span><span class="n">AppendNulls</span><span class="p">(</span><span class="mi">-1</span><span class="p">));</span> |
| <span class="w"> </span><span class="n">rout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Appended -1 null values?"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span> |
| <span class="p">};</span> |
| <span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">test_fn</span><span class="p">();</span> |
| <span class="n">rout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">st</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="literal-block-wrapper docutils container" id="id4"> |
| <div class="code-block-caption"><span class="caption-text">Code Output</span><a class="headerlink" href="#id4" title="Link to this code">¶</a></div> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Invalid</span><span class="p">:</span> <span class="n">length</span> <span class="n">must</span> <span class="n">be</span> <span class="n">positive</span> |
| </pre></div> |
| </div> |
| </div> |
| </section> |
| <section id="using-the-visitor-pattern"> |
| <h2><a class="toc-backref" href="#id9" role="doc-backlink">Using the Visitor Pattern</a><a class="headerlink" href="#using-the-visitor-pattern" title="Link to this heading">¶</a></h2> |
| <p>Arrow classes <a class="reference external" href="https://arrow.apache.org/docs/cpp/api/datatype.html#_CPPv4N5arrow8DataTypeE" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::DataType</span></code></a>, <a class="reference external" href="https://arrow.apache.org/docs/cpp/api/scalar.html#_CPPv4N5arrow6ScalarE" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::Scalar</span></code></a>, and |
| <a class="reference external" href="https://arrow.apache.org/docs/cpp/api/array.html#_CPPv4N5arrow5ArrayE" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::Array</span></code></a> have specialized subclasses for each Arrow type. In |
| order to specialize logic for each subclass, you can use the visitor pattern. |
| Arrow provides inline template functions that allow you to call visitors |
| efficiently:</p> |
| <blockquote> |
| <div><ul class="simple"> |
| <li><p><a class="reference external" href="https://arrow.apache.org/docs/cpp/api/utilities.html#_CPPv4I0DpEN5arrow15VisitTypeInlineE6StatusRK8DataTypeP7VISITORDpRR4ARGS" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">arrow::VisitTypeInline()</span></code></a></p></li> |
| <li><p><a class="reference external" href="https://arrow.apache.org/docs/cpp/api/utilities.html#_CPPv4I0DpEN5arrow17VisitScalarInlineE6StatusRK6ScalarP7VISITORDpRR4ARGS" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">arrow::VisitScalarInline()</span></code></a></p></li> |
| <li><p><a class="reference external" href="https://arrow.apache.org/docs/cpp/api/utilities.html#_CPPv4I0DpEN5arrow16VisitArrayInlineE6StatusRK5ArrayP7VISITORDpRR4ARGS" title="(in Apache Arrow v14.0.1)"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">arrow::VisitArrayInline()</span></code></a></p></li> |
| </ul> |
| </div></blockquote> |
| <section id="generate-random-data"> |
| <h3><a class="toc-backref" href="#id10" role="doc-backlink">Generate Random Data</a><a class="headerlink" href="#generate-random-data" title="Link to this heading">¶</a></h3> |
| <p>See example at <a class="reference internal" href="create.html#generate-random-data-example"><span class="std std-ref">Generate Random Data for a Given Schema</span></a>.</p> |
| </section> |
| <section id="generalize-computations-across-arrow-types"> |
| <h3><a class="toc-backref" href="#id11" role="doc-backlink">Generalize Computations Across Arrow Types</a><a class="headerlink" href="#generalize-computations-across-arrow-types" title="Link to this heading">¶</a></h3> |
| <p>Array visitors can be useful when writing functions that can handle multiple |
| array types. However, implementing a visitor for each type individually can be |
| excessively verbose. Fortunately, Arrow provides type traits that allow you to |
| write templated functions to handle subsets of types. The example below |
| demonstrates a table sum function that can handle any integer or floating point |
| array with only a single visitor implementation by leveraging |
| <code class="xref cpp cpp-type docutils literal notranslate"><span class="pre">arrow::enable_if_number</span></code>.</p> |
| <div class="literal-block-wrapper docutils container" id="id5"> |
| <div class="code-block-caption"><span class="caption-text">Using visitor pattern that can compute sum of table with any numeric type</span><a class="headerlink" href="#id5" title="Link to this code">¶</a></div> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="k">class</span><span class="w"> </span><span class="nc">TableSummation</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos"> 2</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">partial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.0</span><span class="p">;</span> |
| <span class="linenos"> 3</span><span class="w"> </span><span class="k">public</span><span class="o">:</span> |
| <span class="linenos"> 4</span> |
| <span class="linenos"> 5</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o"><</span><span class="kt">double</span><span class="o">></span><span class="w"> </span><span class="n">Compute</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">></span><span class="w"> </span><span class="n">batch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos"> 6</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">></span><span class="w"> </span><span class="n">array</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">batch</span><span class="o">-></span><span class="n">columns</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos"> 7</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">VisitArrayInline</span><span class="p">(</span><span class="o">*</span><span class="n">array</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">));</span> |
| <span class="linenos"> 8</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos"> 9</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">partial</span><span class="p">;</span> |
| <span class="linenos">10</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos">11</span> |
| <span class="linenos">12</span><span class="w"> </span><span class="c1">// Default implementation</span> |
| <span class="linenos">13</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos">14</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">NotImplemented</span><span class="p">(</span><span class="s">"Can not compute sum for array of type "</span><span class="p">,</span> |
| <span class="linenos">15</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">type</span><span class="p">()</span><span class="o">-></span><span class="n">ToString</span><span class="p">());</span> |
| <span class="linenos">16</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos">17</span> |
| <span class="linenos">18</span><span class="w"> </span><span class="k">template</span><span class="w"> </span><span class="o"><</span><span class="k">typename</span><span class="w"> </span><span class="nc">ArrayType</span><span class="p">,</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">ArrayType</span><span class="o">::</span><span class="n">TypeClass</span><span class="o">></span> |
| <span class="linenos">19</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">enable_if_number</span><span class="o"><</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">></span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ArrayType</span><span class="o">&</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos">20</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="o">::</span><span class="n">c_type</span><span class="o">></span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos">21</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="p">.</span><span class="n">has_value</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> |
| <span class="linenos">22</span><span class="w"> </span><span class="n">partial</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="k">static_cast</span><span class="o"><</span><span class="kt">double</span><span class="o">></span><span class="p">(</span><span class="n">value</span><span class="p">.</span><span class="n">value</span><span class="p">());</span> |
| <span class="linenos">23</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos">24</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos">25</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span> |
| <span class="linenos">26</span><span class="w"> </span><span class="p">}</span> |
| <span class="linenos">27</span><span class="p">};</span><span class="w"> </span><span class="c1">// TableSummation</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">Schema</span><span class="o">></span><span class="w"> </span><span class="n">schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">schema</span><span class="p">({</span> |
| <span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">"a"</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">int32</span><span class="p">()),</span> |
| <span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">"b"</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">float64</span><span class="p">()),</span> |
| <span class="p">});</span> |
| <span class="kt">int32_t</span><span class="w"> </span><span class="n">num_rows</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">>></span><span class="w"> </span><span class="n">columns</span><span class="p">;</span> |
| |
| <span class="n">arrow</span><span class="o">::</span><span class="n">Int32Builder</span><span class="w"> </span><span class="n">a_builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Int32Builder</span><span class="p">();</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span><span class="w"> </span><span class="n">a_vals</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">};</span> |
| <span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">a_builder</span><span class="p">.</span><span class="n">AppendValues</span><span class="p">(</span><span class="n">a_vals</span><span class="p">));</span> |
| <span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">a_arr</span><span class="p">,</span><span class="w"> </span><span class="n">a_builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">());</span> |
| <span class="n">columns</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">a_arr</span><span class="p">);</span> |
| |
| <span class="n">arrow</span><span class="o">::</span><span class="n">DoubleBuilder</span><span class="w"> </span><span class="n">b_builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleBuilder</span><span class="p">();</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">double</span><span class="o">></span><span class="w"> </span><span class="n">b_vals</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">};</span> |
| <span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">b_builder</span><span class="p">.</span><span class="n">AppendValues</span><span class="p">(</span><span class="n">b_vals</span><span class="p">));</span> |
| <span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">b_arr</span><span class="p">,</span><span class="w"> </span><span class="n">b_builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">());</span> |
| <span class="n">columns</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">b_arr</span><span class="p">);</span> |
| |
| <span class="k">auto</span><span class="w"> </span><span class="n">batch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">::</span><span class="n">Make</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">num_rows</span><span class="p">,</span><span class="w"> </span><span class="n">columns</span><span class="p">);</span> |
| |
| <span class="c1">// Call</span> |
| <span class="n">TableSummation</span><span class="w"> </span><span class="n">summation</span><span class="p">;</span> |
| <span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">total</span><span class="p">,</span><span class="w"> </span><span class="n">summation</span><span class="p">.</span><span class="n">Compute</span><span class="p">(</span><span class="n">batch</span><span class="p">));</span> |
| |
| <span class="n">rout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Total is "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">total</span><span class="p">;</span> |
| </pre></div> |
| </div> |
| <div class="literal-block-wrapper docutils container" id="id6"> |
| <div class="code-block-caption"><span class="caption-text">Code Output</span><a class="headerlink" href="#id6" title="Link to this code">¶</a></div> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Total</span> <span class="ow">is</span> <span class="mi">21</span> |
| </pre></div> |
| </div> |
| </div> |
| </section> |
| </section> |
| </section> |
| |
| |
| </div> |
| |
| </div> |
| </div> |
| <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> |
| <div class="sphinxsidebarwrapper"> |
| <p class="logo"> |
| <a href="index.html"> |
| <img class="logo" src="_static/arrow-logo_vertical_black-txt_transparent-bg.svg" alt="Logo"/> |
| |
| </a> |
| </p> |
| |
| |
| |
| |
| |
| |
| <p> |
| <iframe src="https://ghbtns.com/github-btn.html?user=apache&repo=arrow-cookbook&type=none&count=true&size=large&v=2" |
| allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe> |
| </p> |
| |
| |
| |
| |
| |
| <h3>Navigation</h3> |
| <p class="caption" role="heading"><span class="caption-text">Contents:</span></p> |
| <ul class="current"> |
| <li class="toctree-l1 current"><a class="current reference internal" href="#">Working with the C++ Implementation</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="#working-with-status-and-result">Working with Status and Result</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="#using-the-visitor-pattern">Using the Visitor Pattern</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="create.html">Creating Arrow Objects</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="datasets.html">Reading and Writing Datasets</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="flight.html">Arrow Flight</a></li> |
| </ul> |
| |
| |
| <hr /> |
| <ul> |
| |
| <li class="toctree-l1"><a href="https://arrow.apache.org/docs/cpp/index.html">User Guide</a></li> |
| |
| <li class="toctree-l1"><a href="https://arrow.apache.org/docs/cpp/api.html">API Reference</a></li> |
| |
| </ul> |
| <div class="relations"> |
| <h3>Related Topics</h3> |
| <ul> |
| <li><a href="index.html">Documentation overview</a><ul> |
| <li>Previous: <a href="index.html" title="previous chapter">Apache Arrow C++ Cookbook</a></li> |
| <li>Next: <a href="create.html" title="next chapter">Creating Arrow Objects</a></li> |
| </ul></li> |
| </ul> |
| </div> |
| <div id="searchbox" style="display: none" role="search"> |
| <h3 id="searchlabel">Quick search</h3> |
| <div class="searchformwrapper"> |
| <form class="search" action="search.html" method="get"> |
| <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> |
| <input type="submit" value="Go" /> |
| </form> |
| </div> |
| </div> |
| <script>document.getElementById('searchbox').style.display = "block"</script> |
| |
| |
| |
| |
| |
| |
| |
| |
| </div> |
| </div> |
| <div class="clearer"></div> |
| </div> |
| <div class="footer"> |
| ©2022, Apache Software Foundation. |
| |
| | |
| Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> |
| & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> |
| |
| | |
| <a href="_sources/basic.rst.txt" |
| rel="nofollow">Page source</a> |
| </div> |
| |
| |
| |
| |
| </body> |
| </html> |