jAgg 0.7.1 (Beta) Released - 03 Jul 2013
New in jAgg 0.7.1:
- Bug fix for Ticket #2. A NullPointerException could occur when
using MaxAggregator or MinAggregator when using super
aggregation or parallelism. Specifically, the merge method wasn't
null-checking its values before comparing them. Now it null-checks its values.
A null merged with a non-null will yield the
non-null counterpart.
jAgg 0.7.0 (Beta) Released - 05 Nov 2012
New in jAgg 0.7.0:
- There is support for "super aggregation" - grouping sets, rollups, and cubes.
New methods in the AggregateValue class determine which properties
represent "all values" in an AggregateValue that represents a
super-aggregate value.
- The new class Aggregation now handles the aggregation duties. It
contains a static Builder class that builds the Aggregation object
based on different parameters. The old API in the Aggregations class
still works, but it simply delegates to Aggregation.
- There is a new "readme.txt" file.
- This site has been reorganized to provide more documentation and more examples.
jAgg 0.6.0 (Beta) Released - 14 Aug 2012
New in jAgg 0.6.0:
- There are two new Aggregators - ModeAggregator, which finds the statistical
mode for a set of values, and CollectAggregator, which adds all values found into
a List.
- There are two new Discriminators, for use in Multiset Discrimination:
DateDiscriminator and CalendarDiscriminator.
- This is the first jAgg release to be submitted to the Sonatype OSS Maven
Repository, which will make jAgg available in the Maven Central Repository.
jAgg 0.5.0 (Beta) Released - 03 May 2012
New in jAgg 0.5.0:
- In 0.4.0 and before, if there were no values to aggregate, then an empty
List of AggregateValues was returned. While this is
correct for grouping by one or more properties, this is incorrect when grouping
by no properties. Now, in 0.5.0, if there are no values to aggregate, and
there are no properties to group by, then a List of one
AggregateValue is returned, with each desired Aggregator returning
initial values.
- In 0.4.0 and before, for parallel processing, a
NullPointerException could result when using a high degree of
parallelism and a low cardinality in the group-by properties. This has been
resolved in 0.5.0.
- A new option in 0.5.0 is to use
Multiset Discrimination instead of sorting to
gather groups of identical properties prior to the actual aggregation. This is
only valid when specifying a group of properties, so each groupBy
method that takes a List of properties now takes an optional boolean
parameter that indicates whether to use Multiset Discrimination or to rely on the
older sorting method. If at any time Multiset Discrimination does not work, jAgg
falls back on sorting.
jAgg 0.4.0 (Beta) Released - 12 Aug 2011
New in jAgg 0.4.0:
- Bug fix for Ticket #1: In 0.3.0 and before, only for Variance- and
Covariance-related Aggregators, and only in parallel execution, sometimes the
results were way off from the correct values. This was caused due to integer
division in the merge method, and this has been fixed.
- Explicit "merge" JUnit test cases have been added for all relevant Aggregators
and for the internal "indexOfLastMatching" method, which is used to determine
the end of a run of objects that are equivalent.
- The "count" member variables for all relevant Aggregators has been changed from
an int to a long.
- In 0.3.0 and before, for parallel processing, n threads were used for
each run of objects that compared the same. This was overkill, especially when
cardinality was high. Now, n threads are used only once for the
entire run.
- In 0.3.0 and before, because double floating-point precision was
used, this led to floating-point errors would affected the precision of the
results. Now, all Aggregators use "Double-Double" precision internally where
appropriate. These now use the new DoubleDouble class internally,
to provide much higher precision for calculations. This class provides the
following arithmetic operations: addition, subtraction, negation, multiplication,
division, squaring, taking the square root, raising to an integer power, and
taking the nth root. All operations are now correct to a precision of
1 ulp (unit in the last place) in a double.
jAgg 0.3.0 (Beta) Released - 25 Jul 2011
New in jAgg 0.3.0:
- JUnit test cases added (using JUnit 4.8.2).
- ConcatAggregator - Don't add the separator if a retrieved property value was null.
- LinearRegressionAggregator - Avoid ArithmeticException (divide by zero) if the
variance of either variable was zero.
- HarmonicMeanAggregator - Avoid ArithmeticException (divide by zero) if a retrieved
property value was zero.
- Ensure order is maintained in parallel aggregations, if a thread that was started
later finished earlier.
- When sorting a copy of the original list of objects to aggregate, avoid a
NullPointerException by allowing null objects.
- Fixed bug in parallel processing where the same Aggregator object could have been
used by multiple threads at the same time.
- The static method Aggregator.getValueFromProperty is now protected
so that all custom Aggregators can access it. (It was package scope before.)
- In addition to retrieving aggregated values by calling
AggregateValue.getAggregateValue(Aggregator), one can now also retrieve
aggregate values by index, with the overloaded
AggregateValue.getAggregateValue(int) method.
- The inheritance hierarchy has been reorganized for Variance, VariancePop, StdDev,
StdDevPop, Covariance, and CovariancePop Aggregators to avoid the earlier awkward
inheritance hierarchy.
- The internally used ExecutorCompletionService (and associated
ThreadPoolExecutor and Threads) is now saved for future
calls.
- For cleaner code, the Aggregator cache is now in its own class,
AggregatorCache.
jAgg 0.2.0 (Beta) Released - 18 Apr 2011
New in jAgg 0.2.0:
- One-argument String constructors added where missing, to allow Aggregator Specification
Strings on all built-in Aggregators.
jAgg 0.1.0 (Beta) Released - 9 Nov 2010
This is the initial release of jAgg.