@Override public Aggregator factorize(final ColumnSelectorFactory columnFactory) { ColumnSelectorPlus<CardinalityAggregatorColumnSelectorStrategy>[] selectorPluses = DimensionHandlerUtils.createColumnSelectorPluses( STRATEGY_FACTORY, fields, columnFactory ); if (selectorPluses.length == 0) { return NoopAggregator.instance(); } return new CardinalityAggregator(selectorPluses, byRow); }
@Override public void aggregate() { if (byRow) { hashRow(selectorPluses, collector); } else { hashValues(selectorPluses, collector); } }
@Test public void testAggregateRows() { CardinalityAggregator agg = new CardinalityAggregator( dimInfoList, true ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorList, agg); } Assert.assertEquals(9.0, (Double) rowAggregatorFactory.finalizeComputation(agg.get()), 0.05); Assert.assertEquals(9L, rowAggregatorFactoryRounded.finalizeComputation(agg.get())); }
@Test public void testAggregateValuesWithExtraction() { CardinalityAggregator agg = new CardinalityAggregator( dimInfoListWithExtraction, false ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorListWithExtraction, agg); } Assert.assertEquals(7.0, (Double) valueAggregatorFactory.finalizeComputation(agg.get()), 0.05); CardinalityAggregator agg2 = new CardinalityAggregator( dimInfoListConstantVal, false ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorListConstantVal, agg2); } Assert.assertEquals(1.0, (Double) valueAggregatorFactory.finalizeComputation(agg2.get()), 0.05); }
@Test public void testAggregateRowsWithExtraction() { CardinalityAggregator agg = new CardinalityAggregator( dimInfoListWithExtraction, true ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorListWithExtraction, agg); } Assert.assertEquals(9.0, (Double) rowAggregatorFactory.finalizeComputation(agg.get()), 0.05); CardinalityAggregator agg2 = new CardinalityAggregator( dimInfoListConstantVal, true ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorListConstantVal, agg2); } Assert.assertEquals(3.0, (Double) rowAggregatorFactory.finalizeComputation(agg2.get()), 0.05); }
@Override public void aggregate(ByteBuffer buf, int position) { // Save position, limit and restore later instead of allocating a new ByteBuffer object final int oldPosition = buf.position(); final int oldLimit = buf.limit(); buf.limit(position + HyperLogLogCollector.getLatestNumBytesForDenseStorage()); buf.position(position); try { final HyperLogLogCollector collector = HyperLogLogCollector.makeCollector(buf); if (byRow) { CardinalityAggregator.hashRow(selectorPluses, collector); } else { CardinalityAggregator.hashValues(selectorPluses, collector); } } finally { buf.limit(oldLimit); buf.position(oldPosition); } }
@Override public Aggregator factorize(final ColumnSelectorFactory columnFactory) { ColumnSelectorPlus<CardinalityAggregatorColumnSelectorStrategy>[] selectorPluses = DimensionHandlerUtils.createColumnSelectorPluses( STRATEGY_FACTORY, fields, columnFactory ); if (selectorPluses.length == 0) { return NoopAggregator.instance(); } return new CardinalityAggregator(selectorPluses, byRow); }
@Test public void testAggregateValues() { CardinalityAggregator agg = new CardinalityAggregator( dimInfoList, false ); for (int i = 0; i < values1.size(); ++i) { aggregate(selectorList, agg); } Assert.assertEquals(NullHandling.replaceWithDefault() ? 7.0 : 6.0, (Double) valueAggregatorFactory.finalizeComputation(agg.get()), 0.05); Assert.assertEquals(NullHandling.replaceWithDefault() ? 7L : 6L, rowAggregatorFactoryRounded.finalizeComputation(agg.get())); }
@Override public void aggregate() { if (byRow) { hashRow(selectorPluses, collector); } else { hashValues(selectorPluses, collector); } }
CardinalityAggregator agg1 = new CardinalityAggregator(dimInfo1, true); CardinalityAggregator agg2 = new CardinalityAggregator(dimInfo2, true); Assert.assertEquals(4.0, (Double) rowAggregatorFactory.finalizeComputation(agg1.get()), 0.05); Assert.assertEquals(8.0, (Double) rowAggregatorFactory.finalizeComputation(agg2.get()), 0.05); (Double) rowAggregatorFactory.finalizeComputation( rowAggregatorFactory.combine( agg1.get(), agg2.get()
@Override public void aggregate(ByteBuffer buf, int position) { // Save position, limit and restore later instead of allocating a new ByteBuffer object final int oldPosition = buf.position(); final int oldLimit = buf.limit(); buf.limit(position + HyperLogLogCollector.getLatestNumBytesForDenseStorage()); buf.position(position); try { final HyperLogLogCollector collector = HyperLogLogCollector.makeCollector(buf); if (byRow) { CardinalityAggregator.hashRow(selectorPluses, collector); } else { CardinalityAggregator.hashValues(selectorPluses, collector); } } finally { buf.limit(oldLimit); buf.position(oldPosition); } }
CardinalityAggregator agg1 = new CardinalityAggregator(dimInfo1, false); CardinalityAggregator agg2 = new CardinalityAggregator(dimInfo2, false); Assert.assertEquals(NullHandling.replaceWithDefault() ? 4.0 : 3.0, (Double) valueAggregatorFactory.finalizeComputation(agg1.get()), 0.05); Assert.assertEquals(NullHandling.replaceWithDefault() ? 7.0 : 6.0, (Double) valueAggregatorFactory.finalizeComputation(agg2.get()), 0.05); (Double) rowAggregatorFactory.finalizeComputation( rowAggregatorFactory.combine( agg1.get(), agg2.get()