K - the type of the Map entry keysV - the type of the Map entry valuesT - the type of the value to extract fromE - the type of the extracted valueR - the type of the group aggregator resultpublic class GroupAggregator<K,V,T,E,R> extends ExternalizableHelper implements InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>, ExternalizableLite, PortableObject
extract call produces the
same value or tuple (list of values). After the entries are split into the
groups, the underlying aggregator is applied separately to each group. The
result of the aggregation by the GroupAggregator is a Map that has distinct
values (or tuples) as keys and results of the individual aggregation as
values. Additionally, those results could be further reduced using an
optional Filter object.
Informally speaking, this aggregator is analogous to the SQL "group by" and "having" clauses. Note that the "having" Filter is applied independently on each server against the partial aggregation results; this generally implies that data affinity is required to ensure that all required data used to generate a given result exists within a single cache partition. In other words, the "group by" predicate should not span multiple partitions if the "having" clause is used.
The GroupAggregator is somewhat similar to the DistinctValues
aggregator, which returns back a list of distinct values (tuples) without
performing any additional aggregation work.
Unlike many other concrete EntryAggregator implementations that are
constructed directly, instances of GroupAggregator should only be created
using one of the factory methods:
createInstance(extractor, aggregator),
createInstance(extractor, aggregator, filter),
createInstance(sMethod, aggregator)
createInstance(sMethod, aggregator, filter)
| Modifier and Type | Class and Description |
|---|---|
static class |
GroupAggregator.Parallel<K,V,T,E,R>
Deprecated.
As of Coherence 12.2.1. Use GroupAggregator instead.
|
ExternalizableHelper.DecoratedMultiBufferReadBuffer, ExternalizableHelper.DefaultObjectStreamFactory, ExternalizableHelper.FormatAwareCompressor, ExternalizableHelper.IntDecoratedObject, ExternalizableHelper.Shielded, ExternalizableHelper.ShieldedDataOutputStream, ExternalizableHelper.ShieldedInputStream, ExternalizableHelper.ShieldedObjectOutputStream, ExternalizableHelper.ShieldedOutputStream, ExternalizableHelper.SimpleXmlBeanClassCache, ExternalizableHelper.Stats, ExternalizableHelper.XmlBeanClassCacheBase.LoggingWriter, Base.StackFrame| Modifier and Type | Field and Description |
|---|---|
protected InvocableMap.EntryAggregator<? super K,? super V,R> |
m_aggregator
The underlying EntryAggregator.
|
protected ValueExtractor<? super T,? extends E> |
m_extractor
The underlying ValueExtractor.
|
protected Filter |
m_filter
The Filter object representing the "having" clause of this "group by"
aggregator.
|
protected boolean |
m_fInit
Flag specifying whether this aggregator has been initialized.
|
protected boolean |
m_fParallel
Flag specifying whether parallel optimizations can be used.
|
protected boolean |
m_fStreaming
Flag specifying whether streaming optimizations can be used.
|
protected Map<E,Object> |
m_mapResults
A map of partial results to aggregate.
|
CHUNK_SIZE, CHUNK_THRESHOLD, CONVERTER_FROM_BINARY, CONVERTER_STRIP_INTDECO, CONVERTER_TO_BINARY, DECO_APP_1, DECO_APP_2, DECO_APP_3, DECO_CUSTOM, DECO_EXPIRY, DECO_ID_MAX, DECO_ID_MIN, DECO_JCACHE, DECO_JCACHE_SYNTHETIC, DECO_MEMCACHED, DECO_PUSHREP, DECO_QUEUE_METADATA, DECO_RSVD_1, DECO_RSVD_2, DECO_STORE, DECO_TX, DECO_VALUE, DECO_WLS, EMPTY_BINARY_ARRAY, FMT_B_ARRAY, FMT_BIN_DECO, FMT_BIN_EXT_DECO, FMT_BINARY, FMT_BOOLEAN, FMT_BYTE, FMT_DECIMAL, FMT_DOUBLE, FMT_EXT, FMT_FLOAT, FMT_IDO, FMT_INT, FMT_INTEGER, FMT_LONG, FMT_NONE, FMT_NULL, FMT_OBJ_EXT, FMT_OBJ_SER, FMT_OPT, FMT_OPT_DOUBLE, FMT_OPT_INT, FMT_OPT_LONG, FMT_SHORT, FMT_STRING, FMT_UNKNOWN, FMT_XML_BEAN, FMT_XML_SER, FORCE_RESOLVING_STREAMS, MAX_DECO_HEADER_BYTES, PROPERTY_CONFIG, s_streamfactory, s_tloInEHDeserialize, TRINT_DOMAIN_SPAN, TRINT_MAX_VALUE, TRINT_MAX_VARIANCE, USE_POF_STREAMS, USE_XMLBEAN_CLASS_CACHE, XMLBEAN_CLASS_CACHELOG_ALWAYS, LOG_DEBUG, LOG_ERR, LOG_INFO, LOG_MAX, LOG_MIN, LOG_QUIET, LOG_WARN, POWER_0, POWER_G, POWER_K, POWER_M, POWER_T, UNIT_D, UNIT_H, UNIT_M, UNIT_MS, UNIT_NS, UNIT_S, UNIT_USALLOW_INCONSISTENCIES, BY_MEMBER, BY_PARTITION, PARALLEL, PRESENT_ONLY, RETAINS_ENTRIES, SERIAL| Modifier | Constructor and Description |
|---|---|
|
GroupAggregator()
Default constructor (necessary for the ExternalizableLite interface).
|
protected |
GroupAggregator(ValueExtractor<? super T,? extends E> extractor,
InvocableMap.EntryAggregator<? super K,? super V,R> aggregator,
Filter filter)
Construct a GroupAggregator based on a specified ValueExtractor and
underlying EntryAggregator.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
accumulate(InvocableMap.Entry<? extends K,? extends V> entry)
Accumulate one entry into the result.
|
int |
characteristics()
A bit mask representing the set of characteristics of this aggregator.
|
boolean |
combine(Map<E,Object> partialResult)
Merge another partial result into the result.
|
static <K,V,R> GroupAggregator<K,V,Object,Object,R> |
createInstance(String sMethod,
InvocableMap.EntryAggregator<K,V,R> aggregator)
Create an instance of GroupAggregator based on a specified method
name(s) and an
EntryAggregator. |
static <K,V,R> GroupAggregator<K,V,Object,Object,R> |
createInstance(String sMethod,
InvocableMap.EntryAggregator<K,V,R> aggregator,
Filter filter)
Create an instance of GroupAggregator based on a specified method
name(s), an
EntryAggregator and a result evaluation filter. |
static <K,V,T,E,R> |
createInstance(ValueExtractor<? super T,? extends E> extractor,
InvocableMap.EntryAggregator<? super K,? super V,R> aggregator,
Filter filter)
Create an instance of GroupAggregator based on a specified extractor
and an
EntryAggregator and a result evaluation filter. |
static <K,V,T,E,R> |
createInstance(ValueExtractor<? super T,? extends E> extractor,
InvocableMap.EntryAggregator<K,V,R> aggregator)
Create an instance of GroupAggregator based on a specified extractor and
an
EntryAggregator. |
protected void |
ensureInitialized()
Ensure that this aggregator is initialized.
|
boolean |
equals(Object o)
Compare the GroupAggregator with another object to determine
equality.
|
Map<E,R> |
finalizeResult()
Return the final result of the aggregation.
|
InvocableMap.EntryAggregator<? super K,? super V,R> |
getAggregator()
Obtain the underlying EntryAggregator.
|
ValueExtractor<?,? extends E> |
getExtractor()
Obtain the underlying ValueExtractor.
|
Map<E,Object> |
getPartialResult()
Return the partial result of the aggregation.
|
int |
hashCode()
Determine a hash value for the GroupAggregator object according to the
general
Object.hashCode() contract. |
protected boolean |
isDelegateParallel()
Return
true if the underlying aggregator is a ParallelAwareAggregator. |
protected boolean |
isDelegateStreaming()
Return
true if the underlying aggregator is a StreamingAggregator. |
protected InvocableMap.ParallelAwareAggregator<? super K,? super V,Object,R> |
parallel(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
Convert the specified aggregator to ParallelAwareAggregator.
|
void |
readExternal(DataInput in)
Restore the contents of this object by loading the object's state from
the passed DataInput object.
|
void |
readExternal(PofReader in)
Restore the contents of a user type instance by reading its state using
the specified PofReader object.
|
protected InvocableMap.StreamingAggregator<? super K,? super V,Object,R> |
streaming(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
Convert the specified aggregator to StreamingAggregator.
|
InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>> |
supply()
Create a new instance of this aggregator.
|
protected static <T> BinaryOperator<T> |
throwingMerger() |
String |
toString()
Return a human-readable description for this GroupAggregator.
|
void |
writeExternal(DataOutput out)
Save the contents of this object by storing the object's state into
the passed DataOutput object.
|
void |
writeExternal(PofWriter out)
Save the contents of a POF user type instance by writing its state using
the specified PofWriter object.
|
asBinary, calculatePackedLength, calculatePackedLength, checkObjectInputFilter, checkObjectInputFilter, checkObjectInputFilter, convertUTF, decodeExpiry, decorate, decorate, decorate, decorate, decorate, decorateBinary, encodeExpiry, ensureSerializer, extractIntDecoration, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromByteArray, fromByteArray, getClass, getConfigSerialFilter, getConfigSerialFilterFactory, getDecoration, getDecoration, getDecorations, getDeltaCompressor, getInputStream, getNewObjectInput, getObjectInput, getObjectInputFilter, getObjectOutput, getObjectStreamFactory, getOutputStream, getShieldedOutputStream, getStreamFormat, getUndecorated, getUndecorated, isDecorated, isDecorated, isIntDecorated, isIntDecorated, isPatchCompatible, isPatchCompatible, isResolving, isSerializable, isSerializerCompatible, isVersionCompatible, isVersionCompatible, isVersionCompatible, isVersionCompatible, isVersionCompatible, isVersionCompatible, loadClass, loadResource, main, makeTrint, readBigDecimal, readBigInteger, readBooleanArray, readBooleanArray, readByteArray, readCharArray, readCharArray, readCollection, readDate, readDoubleArray, readDoubleArray, readExternalizableLite, readExternalizableLite, readFloatArray, readFloatArray, readInt, readInt, readIntArray, readIntArray, readIntArray2d, readLargeBooleanArray, readLargeByteArray, readLargeCharArray, readLargeDoubleArray, readLargeFloatArray, readLargeIntArray, readLargeLongArray, readLargeObjectArray, readLargeStringArray, readLong, readLong, readLongArray, readLongArray, readMap, readMap, readObject, readObject, readObjectArray, readObjectArray, readSafeUTF, readSafeUTF, readSerializable, readSerializable, readStringArray, readStringArray, readTime, readTimestamp, readTrint, readUnsignedTrint, readUTF, readXmlBean, readXmlSerializable, readXmlSerializable, realize, removeIntDecoration, removeIntDecoration, replace, reportIncompatibleSerializers, setObjectStreamFactory, toBinary, toBinary, toBinary, toByteArray, toByteArray, toByteArray, toLiteBinary, toLong, undecorate, undecorate, validateBufferSize, validateLoadArray, validateLoadClass, writeBigDecimal, writeBigInteger, writeBooleanArray, writeByteArray, writeCollection, writeDate, writeDoubleArray, writeExternalizableLite, writeFloatArray, writeInt, writeInt, writeIntArray2d, writeLong, writeLong, writeMap, writeObject, writeSafeUTF, writeSafeUTF, writeSerializable, writeStringArray, writeTime, writeTimestamp, writeTrint, writeTrint, writeUTF, writeXmlBean, writeXmlSerializablecountBits, countBits, countBits, indexOfLSB, indexOfLSB, indexOfLSB, indexOfMSB, indexOfMSB, indexOfMSB, rotateLeft, rotateLeft, rotateLeft, rotateRight, rotateRight, rotateRight, toBitString, toBitString, toBitString, toBytes, toBytes, toBytes, toBytes, toInt, toInt, toLongazzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, waitclone, finalize, getClass, notify, notifyAll, wait, wait, waitaccumulate, aggregate, isAllowInconsistencies, isByMember, isByPartition, isParallel, isPresentOnly, isRetainsEntries, isSerialprotected ValueExtractor<? super T,? extends E> m_extractor
protected InvocableMap.EntryAggregator<? super K,? super V,R> m_aggregator
protected Filter m_filter
protected transient boolean m_fInit
protected transient boolean m_fStreaming
protected transient boolean m_fParallel
public GroupAggregator()
protected GroupAggregator(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
extractor - a ValueExtractor object that is used to split
InvocableMap entries into non-intersecting subsets;
may not be nullaggregator - an EntryAggregator object; may not be nullfilter - an optional Filter object used to filter out
results of individual group aggregation resultspublic InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>> supply()
InvocableMap.StreamingAggregatorpublic boolean accumulate(InvocableMap.Entry<? extends K,? extends V> entry)
InvocableMap.StreamingAggregatoraccumulate in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>entry - the entry to accumulate into the aggregation resulttrue to continue the aggregation, and false to
signal to the caller that the result is ready and the
aggregation can be short-circuitedpublic boolean combine(Map<E,Object> partialResult)
InvocableMap.StreamingAggregatorpublic Map<E,Object> getPartialResult()
InvocableMap.StreamingAggregatorgetPartialResult in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>public Map<E,R> finalizeResult()
InvocableMap.StreamingAggregatorfinalizeResult in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>public int characteristics()
InvocableMap.StreamingAggregator
Be default, characteristics are a combination of InvocableMap.StreamingAggregator.PARALLEL
and InvocableMap.StreamingAggregator.RETAINS_ENTRIES, which is sub-optimal and should be
overridden by the aggregator implementation if the aggregator does not
need to retain entries (which is often the case).
characteristics in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>InvocableMap.StreamingAggregator.PARALLEL,
InvocableMap.StreamingAggregator.SERIAL,
InvocableMap.StreamingAggregator.BY_MEMBER,
InvocableMap.StreamingAggregator.BY_PARTITION,
InvocableMap.StreamingAggregator.RETAINS_ENTRIES,
InvocableMap.StreamingAggregator.PRESENT_ONLYpublic ValueExtractor<?,? extends E> getExtractor()
public InvocableMap.EntryAggregator<? super K,? super V,R> getAggregator()
protected void ensureInitialized()
protected InvocableMap.StreamingAggregator<? super K,? super V,Object,R> streaming(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
aggregator - the aggregator to convertprotected InvocableMap.ParallelAwareAggregator<? super K,? super V,Object,R> parallel(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
aggregator - the aggregator to convertprotected boolean isDelegateStreaming()
true if the underlying aggregator is a StreamingAggregator.true if the underlying aggregator is a StreamingAggregatorprotected boolean isDelegateParallel()
true if the underlying aggregator is a ParallelAwareAggregator.true if the underlying aggregator is a ParallelAwareAggregatorprotected static <T> BinaryOperator<T> throwingMerger()
public void readExternal(DataInput in) throws IOException
ExternalizableLitereadExternal in interface ExternalizableLitein - the DataInput stream to read data from in order to restore
the state of this objectIOException - if an I/O exception occursNotActiveException - if the object is not in its initial
state, and therefore cannot be deserialized intopublic void writeExternal(DataOutput out) throws IOException
ExternalizableLitewriteExternal in interface ExternalizableLiteout - the DataOutput stream to write the state of this object toIOException - if an I/O exception occurspublic void readExternal(PofReader in) throws IOException
PortableObjectreadExternal in interface PortableObjectin - the PofReader from which to read the object's stateIOException - if an I/O error occurspublic void writeExternal(PofWriter out) throws IOException
PortableObjectwriteExternal in interface PortableObjectout - the PofWriter to which to write the object's stateIOException - if an I/O error occurspublic boolean equals(Object o)
public int hashCode()
Object.hashCode() contract.public String toString()
public static <K,V,R> GroupAggregator<K,V,Object,Object,R> createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator)
EntryAggregator.
ParallelAwareAggregator, then a parallel-aware instance of the
GroupAggregator will be created. Otherwise, the resulting
GroupAggregator will not be parallel-aware and could be ill-suited for
aggregations run against large partitioned caches.sMethod - a method name or a comma-delimited sequence of names
that results in a ReflectionExtractor
or a MultiExtractor that will be used to
split InvocableMap entries into distinct groupsaggregator - an underlying EntryAggregatorpublic static <K,V,R> GroupAggregator<K,V,Object,Object,R> createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator, Filter filter)
EntryAggregator and a result evaluation filter.
ParallelAwareAggregator, then a parallel-aware instance of the
GroupAggregator will be created. Otherwise, the resulting GroupAggregator
will not be parallel-aware and could be ill-suited for aggregations run
against large partitioned caches.sMethod - a method name or a comma-delimited sequence of names
that results in a ReflectionExtractor or a
MultiExtractor that will be used to split
InvocableMap entries into distinct groupsaggregator - an underlying EntryAggregatorfilter - an optional Filter object that will be used to evaluate
results of each individual group aggregationpublic static <K,V,T,E,R> GroupAggregator<K,V,T,E,R> createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<K,V,R> aggregator)
EntryAggregator.
ParallelAwareAggregator, then a parallel-aware instance of the
GroupAggregator will be created. Otherwise, the resulting GroupAggregator
will not be parallel-aware and could be ill-suited for aggregations run
against large partitioned caches.extractor - a ValueExtractor that will be used to split a set of
InvocableMap entries into distinct groupsaggregator - an underlying EntryAggregatorpublic static <K,V,T,E,R> GroupAggregator<K,V,T,E,R> createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
EntryAggregator and a result evaluation filter.
ParallelAwareAggregator, then a parallel-aware instance of the
GroupAggregator will be created. Otherwise, the resulting
GroupAggregator will not be parallel-aware and could be ill-suited for
aggregations run against large partitioned caches.extractor - a ValueExtractor that will be used to split a set of
InvocableMap entries into distinct groupsaggregator - an underlying EntryAggregatorfilter - an optional Filter object used to filter out results
of individual group aggregation results