<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_112) on Sun Feb 26 17:08:09 EST 2017 -->
<title>JsonAnalytics (Edgent v1.1.0)</title>
<meta name="date" content="2017-02-26">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="JsonAnalytics (Edgent v1.1.0)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JsonAnalytics.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/edgent/analytics/math3/json/JsonAnalytics.html" target="_top">Frames</a></li>
<li><a href="JsonAnalytics.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.edgent.analytics.math3.json</div>
<h2 title="Class JsonAnalytics" class="title">Class JsonAnalytics</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.edgent.analytics.math3.json.JsonAnalytics</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">JsonAnalytics</span>
extends java.lang.Object</pre>
<div class="block">Apache Common Math analytics for streams with JSON tuples.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#JsonAnalytics--">JsonAnalytics</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static &lt;K extends com.google.gson.JsonElement&gt;<br><a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#aggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">aggregate</a></span>(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
         java.lang.String&nbsp;resultPartitionProperty,
         java.lang.String&nbsp;valueProperty,
         <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</code>
<div class="block">Aggregate against a single <code>Numeric</code> variable contained in an JSON object.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;K extends com.google.gson.JsonElement&gt;<br><a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#aggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-org.apache.edgent.function.ToDoubleFunction-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">aggregate</a></span>(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
         java.lang.String&nbsp;resultPartitionProperty,
         java.lang.String&nbsp;resultProperty,
         <a href="../../../../../../org/apache/edgent/function/ToDoubleFunction.html" title="interface in org.apache.edgent.function">ToDoubleFunction</a>&lt;com.google.gson.JsonObject&gt;&nbsp;valueGetter,
         <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</code>
<div class="block">Aggregate against a single <code>Numeric</code> variable contained in an JSON object.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static &lt;K extends com.google.gson.JsonElement&gt;<br><a href="../../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;java.util.List&lt;com.google.gson.JsonObject&gt;,K,com.google.gson.JsonObject&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#aggregateList-java.lang.String-java.lang.String-org.apache.edgent.function.ToDoubleFunction-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">aggregateList</a></span>(java.lang.String&nbsp;resultPartitionProperty,
             java.lang.String&nbsp;resultProperty,
             <a href="../../../../../../org/apache/edgent/function/ToDoubleFunction.html" title="interface in org.apache.edgent.function">ToDoubleFunction</a>&lt;com.google.gson.JsonObject&gt;&nbsp;valueGetter,
             <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</code>
<div class="block">Create a Function that aggregates against a single <code>Numeric</code>
 variable contained in an JSON object.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static com.google.gson.JsonElement</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-">getMvAggregate</a></span>(com.google.gson.JsonObject&nbsp;jo,
              java.lang.String&nbsp;resultProperty,
              java.lang.String&nbsp;variableName,
              <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>&nbsp;aggregate)</code>
<div class="block">Get the value of an aggregate computed by a multi-variable aggregation.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#hasMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-">hasMvAggregate</a></span>(com.google.gson.JsonObject&nbsp;jo,
              java.lang.String&nbsp;resultProperty,
              java.lang.String&nbsp;variableName,
              <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>&nbsp;aggregate)</code>
<div class="block">Check if an aggregation result from a multi-variable aggregation
 is present.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">mkAggregationSpec</a></span>(java.lang.String&nbsp;variableName,
                 <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</code>
<div class="block">Create an aggregation specification.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>static &lt;K extends com.google.gson.JsonElement&gt;<br><a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-java.util.List-">mvAggregate</a></span>(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
           java.lang.String&nbsp;resultPartitionKeyProperty,
           java.lang.String&nbsp;resultProperty,
           java.util.List&lt;org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;&gt;&nbsp;aggregateSpecs)</code>
<div class="block">Aggregate against multiple <code>Numeric</code> variables contained in an JSON object.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>static &lt;K extends com.google.gson.JsonElement&gt;<br><a href="../../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;java.util.List&lt;com.google.gson.JsonObject&gt;,K,com.google.gson.JsonObject&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-">mvAggregateList</a></span>(java.lang.String&nbsp;resultPartitionKeyProperty,
               java.lang.String&nbsp;resultProperty,
               java.util.List&lt;org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;&gt;&nbsp;aggregateSpecs)</code>
<div class="block">Create a Function that aggregates multiple <code>Numeric</code>
 variables contained in an JSON object.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="JsonAnalytics--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>JsonAnalytics</h4>
<pre>public&nbsp;JsonAnalytics()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="aggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>aggregate</h4>
<pre>public static&nbsp;&lt;K extends com.google.gson.JsonElement&gt;&nbsp;<a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;&nbsp;aggregate(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
                                                                                                    java.lang.String&nbsp;resultPartitionProperty,
                                                                                                    java.lang.String&nbsp;valueProperty,
                                                                                                    <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</pre>
<div class="block">Aggregate against a single <code>Numeric</code> variable contained in an JSON object.
 
 The returned stream contains a tuple for each execution performed against a window partition.
 The tuple is a <code>JsonObject</code> containing:
 <UL>
 <LI> Partition key of type <code>K</code> as a property with key <code>resultPartitionProperty</code>. </LI>
 <LI> Aggregation results as a <code>JsonObject</code> as a property with key <code>valueProperty</code>.
 This results object contains the results of all aggregations defined by <code>aggregates</code> against
 <code>double</code> property with key <code>valueProperty</code>.
 <BR>
 Each <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json"><code>JsonUnivariateAggregate</code></a> declares how it represents its aggregation in this result
 object.
 </LI>
 </UL>
 <P>
 For example if the window contains these three tuples (pseudo JSON) for
 partition 3:
 <BR>
 <code>{id=3,reading=2.0}, {id=3,reading=2.6}, {id=3,reading=1.8}</code>
 <BR>
 the resulting aggregation for the stream returned by:
 <BR>
 <code>aggregate(window, "id", "reading", Statistic.MIN, Statistic.MAX)</code>
 <BR>
 would contain this tuple with the maximum and minimum values in the <code>reading</code>
 JSON object:
 <BR>
 <code>{id=3, reading={MIN=1.8, MAX=1.8}}</code>
 </P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>K</code> - Partition type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>window</code> - Window to aggregate over.</dd>
<dd><code>resultPartitionProperty</code> - Property to store the partition key in tuples on the returned stream.</dd>
<dd><code>valueProperty</code> - JSON property containing the value to aggregate.</dd>
<dd><code>aggregates</code> - Which aggregations to be performed.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that will contain aggregations.</dd>
</dl>
</li>
</ul>
<a name="aggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-org.apache.edgent.function.ToDoubleFunction-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>aggregate</h4>
<pre>public static&nbsp;&lt;K extends com.google.gson.JsonElement&gt;&nbsp;<a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;&nbsp;aggregate(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
                                                                                                    java.lang.String&nbsp;resultPartitionProperty,
                                                                                                    java.lang.String&nbsp;resultProperty,
                                                                                                    <a href="../../../../../../org/apache/edgent/function/ToDoubleFunction.html" title="interface in org.apache.edgent.function">ToDoubleFunction</a>&lt;com.google.gson.JsonObject&gt;&nbsp;valueGetter,
                                                                                                    <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</pre>
<div class="block">Aggregate against a single <code>Numeric</code> variable contained in an JSON object.
 
 The returned stream contains a tuple for each execution performed against a window partition.
 The tuple is a <code>JsonObject</code> containing:
 <UL>
 <LI> Partition key of type <code>K</code> as a property with key <code>resultPartitionProperty</code>. </LI>
 <LI> Aggregation results as a <code>JsonObject</code> as a property with key <code>resultProperty</code>.
 This results object contains the results of all aggregations defined by <code>aggregates</code> against
 value returned by <code>valueGetter</code>.
 <BR>
 Each <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json"><code>JsonUnivariateAggregate</code></a> declares how it represents its aggregation in this result
 object.
 </LI>
 </UL></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>K</code> - Partition type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>window</code> - Window to aggregate over.</dd>
<dd><code>resultPartitionProperty</code> - Property to store the partition key in tuples on the returned stream.</dd>
<dd><code>resultProperty</code> - Property to store the aggregations in tuples on the returned stream.</dd>
<dd><code>valueGetter</code> - How to obtain the single variable from input tuples.</dd>
<dd><code>aggregates</code> - Which aggregations to be performed.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that will contain aggregations.</dd>
</dl>
</li>
</ul>
<a name="aggregateList-java.lang.String-java.lang.String-org.apache.edgent.function.ToDoubleFunction-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>aggregateList</h4>
<pre>public static&nbsp;&lt;K extends com.google.gson.JsonElement&gt;&nbsp;<a href="../../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;java.util.List&lt;com.google.gson.JsonObject&gt;,K,com.google.gson.JsonObject&gt;&nbsp;aggregateList(java.lang.String&nbsp;resultPartitionProperty,
                                                                                                                                                        java.lang.String&nbsp;resultProperty,
                                                                                                                                                        <a href="../../../../../../org/apache/edgent/function/ToDoubleFunction.html" title="interface in org.apache.edgent.function">ToDoubleFunction</a>&lt;com.google.gson.JsonObject&gt;&nbsp;valueGetter,
                                                                                                                                                        <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</pre>
<div class="block">Create a Function that aggregates against a single <code>Numeric</code>
 variable contained in an JSON object.
 
 Calling <code>apply(List&lt;JsonObject&gt;)</code> on the returned <code>BiFunction</code>
 returns a <code>JsonObject</code> containing:
 <UL>
 <LI> Partition key of type <code>K</code> as a property with key <code>resultPartitionProperty</code>. </LI>
 <LI> Aggregation results as a <code>JsonObject</code> as a property with key <code>valueProperty</code>.
 This results object contains the results of all aggregations defined by <code>aggregates</code>
 against the value returned by <code>valueGetter</code>.
 <BR>
 Each <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json"><code>JsonUnivariateAggregate</code></a> declares how it represents its aggregation in this result
 object.
 </LI>
 </UL>
 <P>
 For example if the list contains these three tuples (pseudo JSON) for
 partition 3:
 <BR>
 <code>{id=3,reading=2.0}, {id=3,reading=2.6}, {id=3,reading=1.8}</code>
 <BR>
 the resulting aggregation for the JsonObject returned by:
 <BR>
 <code>aggregateList("id", "reading", Statistic.MIN, Statistic.MAX).apply(list, 3)</code>
 <BR>
 would be this tuple with the maximum and minimum values in the <code>reading</code>
 JSON object:
 <BR>
 <code>{id=3, reading={MIN=1.8, MAX=1.8}}</code>
 </P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>K</code> - Partition type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>resultPartitionProperty</code> - Property to store the partition key in tuples on the returned stream.</dd>
<dd><code>resultProperty</code> - Property to store the aggregations in the returned JsonObject.</dd>
<dd><code>valueGetter</code> - How to obtain the single variable from input tuples.</dd>
<dd><code>aggregates</code> - Which aggregations to be performed.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Function that performs the aggregations.</dd>
</dl>
</li>
</ul>
<a name="mvAggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-java.util.List-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mvAggregate</h4>
<pre>public static&nbsp;&lt;K extends com.google.gson.JsonElement&gt;&nbsp;<a href="../../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;com.google.gson.JsonObject&gt;&nbsp;mvAggregate(<a href="../../../../../../org/apache/edgent/topology/TWindow.html" title="interface in org.apache.edgent.topology">TWindow</a>&lt;com.google.gson.JsonObject,K&gt;&nbsp;window,
                                                                                                      java.lang.String&nbsp;resultPartitionKeyProperty,
                                                                                                      java.lang.String&nbsp;resultProperty,
                                                                                                      java.util.List&lt;org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;&gt;&nbsp;aggregateSpecs)</pre>
<div class="block">Aggregate against multiple <code>Numeric</code> variables contained in an JSON object.
 <P>
 This is a multi-variable analog of <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#aggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>aggregate()</code></a>
 </P>
 <P>
 See <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregateList()</code></a> for
 a description of the aggregation processing and result stream.
 </P>
 <P>
 Sample use:
 <pre><code>
 // Ingest the data.  The JsonObject tuples have properties:
 //   "id" - the partitionKey
 //   "tx" - a numeric data variable
 //   "rx" - a numeric data variable
 TStream&lt;JsonObject&gt; ingestData = ...
 
 // Define the tuple variables and their aggregations to compute
 List&lt;Pair&lt;String, JsonUnivariateAggregate[]&gt;&gt; aggSpecs = new ArrayList&lt;&gt;();
 aggSpecs.add(mkAggregationSpec("tx", Statistics.MIN, Statistics.MAX));
 aggSpecs.add(mkAggregationSpec("rx", Statistics.MEAN));
 
 // Create the window over which to aggregate
 TWindow&lt;JsonObject, JsonElement&gt; window = 
    ingestData.last(5, TimeUnit.SECONDS, jo -&gt; jo.get("id"));
 
 // Create a stream with the aggregations. The result tuples have properties:
 //   "id" - the partitionKey
 //   "aggResults" - the aggregation results
 TStream&lt;JsonObject&gt; aggResults = 
    mvAggregate(window, "id", "aggResults", aggSpecs);
    
 // Create a stream of JsonObject tuples with just the average "rx"
 TStream&lt;JsonObject&gt; avgRx = aggResults.map(
    jo -&gt; {
      JsonObject result = new JsonObject();
      result.add("id", jo.get("id"))
      result.add("avgRx", getMvAggregate(jo, "aggResults", "Rx", Statistic.MEAN);
      return result;
    });
 </code></pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>window</code> - the window to compute aggregations over</dd>
<dd><code>resultPartitionKeyProperty</code> - name of the partition key property in the result</dd>
<dd><code>resultProperty</code> - name of the aggregation results property in the result</dd>
<dd><code>aggregateSpecs</code> - see <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>mkAggregationSpec()</code></a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TStream<JsonObject> with aggregation results</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregateList()</code></a>, 
<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>mkAggregationSpec()</code></a>, 
<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-"><code>getMvAggregate()</code></a></dd>
</dl>
</li>
</ul>
<a name="mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mkAggregationSpec</h4>
<pre>public static&nbsp;org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;&nbsp;mkAggregationSpec(java.lang.String&nbsp;variableName,
                                                                                                               <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>...&nbsp;aggregates)</pre>
<div class="block">Create an aggregation specification.
 <P>
 The aggregation specification specifies a variable name and
 the aggregates to compute on it.
 </P>
 <P>
 The specification can be use with <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-"><code>mkAggregateList()</code></a></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>variableName</code> - the name of a <code>Numeric</code> data variable in a JSON object</dd>
<dd><code>aggregates</code> - the aggregates to compute for the variable</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the aggregation specification</dd>
</dl>
</li>
</ul>
<a name="mvAggregateList-java.lang.String-java.lang.String-java.util.List-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mvAggregateList</h4>
<pre>public static&nbsp;&lt;K extends com.google.gson.JsonElement&gt;&nbsp;<a href="../../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;java.util.List&lt;com.google.gson.JsonObject&gt;,K,com.google.gson.JsonObject&gt;&nbsp;mvAggregateList(java.lang.String&nbsp;resultPartitionKeyProperty,
                                                                                                                                                          java.lang.String&nbsp;resultProperty,
                                                                                                                                                          java.util.List&lt;org.apache.commons.math3.util.Pair&lt;java.lang.String,<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>[]&gt;&gt;&nbsp;aggregateSpecs)</pre>
<div class="block">Create a Function that aggregates multiple <code>Numeric</code>
 variables contained in an JSON object.
 <P>
 This is a multi-variable analog of <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#aggregateList-java.lang.String-java.lang.String-org.apache.edgent.function.ToDoubleFunction-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>aggregateList()</code></a>
 <P>
 The overall multi-variable aggregation result is a JSON object
 with properties:
 <ul>
 <li><code>resultPartionKeyProperty</code> whose value is the tuple's partition key
 <li><code>resultProperty</code> whose value is a JSON object containing
     a property for each variable aggregation.  The property names
     correspond to the variable names from the <code>aggregateSpecs</code>
     and the values are the aggregation results for the variable.
     The aggregation results for a variable are a JSON object 
     having a property for each aggregation name and its value.</li>
 </ul>
 <P>
 For example if the list contains these three tuples (pseudo JSON) for
 partition 3:
 <BR>
 <code>{id=3,tx=2.0,rx=1.0,...}, {id=3,tx=2.6,rx=2.0,...}, {id=3,tx=1.8,rx=3.0,...}</code>
 <BR>
 the resulting aggregation JsonObject returned is:
 <BR>
 <code>{id=3, aggData={tx={MIN=1.8, MAX=2.6}, rx={MEAN=2.0}}}</code>
 <BR>
 for the invocation:
 <BR>
 <code>mvAggregateList("id", "aggData", aggSpecs).apply(list, 3))</code>
 <BR>
 where <code>aggSpecs</code> is:
 <BR>
 <code>aggSpecs.add(mkAggregationSpec("tx", Statistics.MIN, Statistics.MAX));
 aggSpecs.add(mkAggregationSpec("rx", Statistics.MEAN));
 </code>
 </P>
 <P>
 <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-"><code>getMvAggregate()</code></a>
 can be used to extract individual aggregate values from the result.
 </P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>K</code> - Partition Key as a JsonElement</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>resultPartitionKeyProperty</code> - name of the partition key property in the result</dd>
<dd><code>resultProperty</code> - name of the aggregation results property in the result</dd>
<dd><code>aggregateSpecs</code> - see <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>mkAggregationSpec()</code></a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Function that performs the aggregations.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mkAggregationSpec-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate...-"><code>mkAggregationSpec()</code></a>, 
<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-"><code>getMvAggregate()</code></a></dd>
</dl>
</li>
</ul>
<a name="getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMvAggregate</h4>
<pre>public static&nbsp;com.google.gson.JsonElement&nbsp;getMvAggregate(com.google.gson.JsonObject&nbsp;jo,
                                                         java.lang.String&nbsp;resultProperty,
                                                         java.lang.String&nbsp;variableName,
                                                         <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>&nbsp;aggregate)</pre>
<div class="block">Get the value of an aggregate computed by a multi-variable aggregation.
 <P>
 This convenience method can be used to extract information from a JSON object
 created by <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregationList()</code></a>
 or <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregate()</code></a>
 </P>
 <P>
 Sample use:
 <pre><code>
 ...
 TStream&lt;JsonObject&gt; aggData = mvAggregate(window, "id", "aggResults", aggSpecs);
 
 // Create a stream of JsonObject tuples with just the average "tx"
 TStream&lt;JsonObject&gt; avgTx = aggResults.map(
    jo -&gt; {
      JsonObject result = new JsonObject();
      result.add(partitionKeyName, jo.get(partitionKeyName))
      result.add("avgTx", getMvAggregate(jo, "aggResults", "tx", Statistic.MEAN);
      return result;
    });
 </code></pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>jo</code> - a JSON object created by <code>mvAggregationList</code></dd>
<dd><code>resultProperty</code> - the corresponding value passed to <code>mvAggragateList</code></dd>
<dd><code>variableName</code> - the data variable of interest in the multivariable aggregates</dd>
<dd><code>aggregate</code> - the variable's aggregate of interest</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the variable's aggregate's value as a JsonElement</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.RuntimeException</code> - if the aggregate isn't present in the result</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#hasMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-"><code>hasAggregate()</code></a>, 
<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregate-org.apache.edgent.topology.TWindow-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregate()</code></a>, 
<a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#mvAggregateList-java.lang.String-java.lang.String-java.util.List-"><code>mvAggregateList()</code></a></dd>
</dl>
</li>
</ul>
<a name="hasMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>hasMvAggregate</h4>
<pre>public static&nbsp;boolean&nbsp;hasMvAggregate(com.google.gson.JsonObject&nbsp;jo,
                                     java.lang.String&nbsp;resultProperty,
                                     java.lang.String&nbsp;variableName,
                                     <a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json">JsonUnivariateAggregate</a>&nbsp;aggregate)</pre>
<div class="block">Check if an aggregation result from a multi-variable aggregation
 is present.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>jo</code> - a JSON object created by <code>mvAggregationList</code></dd>
<dd><code>resultProperty</code> - the corresponding value passed to <code>mvAggragateList</code></dd>
<dd><code>variableName</code> - the data variable of interest in the multivariable aggregates</dd>
<dd><code>aggregate</code> - the variable's aggregate of interest</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the specified aggregate is present in the jo, false otherwise.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonAnalytics.html#getMvAggregate-com.google.gson.JsonObject-java.lang.String-java.lang.String-org.apache.edgent.analytics.math3.json.JsonUnivariateAggregate-"><code>getMvAggregate()</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JsonAnalytics.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><a href="http://edgent.incubator.apache.org">Apache Edgent (incubating)</a></div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../../../org/apache/edgent/analytics/math3/json/JsonUnivariateAggregate.html" title="interface in org.apache.edgent.analytics.math3.json"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/edgent/analytics/math3/json/JsonAnalytics.html" target="_top">Frames</a></li>
<li><a href="JsonAnalytics.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2017 The Apache Software Foundation. All Rights Reserved - 4744f56-20170226-1707</small></p>
</body>
</html>
