@Override public void reset(ColumnValueSelector selector) { combined = null; fold(selector); }
@Override public AggregateCombiner makeAggregateCombiner() { return new HyperLogLogCollectorAggregateCombiner(); }
@Override public List<String> requiredFields() { return makeRequiredFieldNamesFromFields(fields); }
dimSpec1.getDimension(), dimSpec1.getOutputName(), new StringCardinalityAggregatorColumnSelectorStrategy(), dim1 dimSpec1.getDimension(), dimSpec1.getOutputName(), new StringCardinalityAggregatorColumnSelectorStrategy(), dim2 CardinalityAggregator agg1 = new CardinalityAggregator(dimInfo1, true); CardinalityAggregator agg2 = new CardinalityAggregator(dimInfo2, true); aggregate(selector1, agg1); aggregate(selector2, agg2); 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()
@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 testBufferAggregateRows() { CardinalityBufferAggregator agg = new CardinalityBufferAggregator( dimInfoList.toArray(new ColumnSelectorPlus[0]), true ); int maxSize = rowAggregatorFactory.getMaxIntermediateSizeWithNulls(); ByteBuffer buf = ByteBuffer.allocate(maxSize + 64); int pos = 10; buf.limit(pos + maxSize); agg.init(buf, pos); for (int i = 0; i < values1.size(); ++i) { bufferAggregate(selectorList, agg, buf, pos); } Assert.assertEquals(9.0, (Double) rowAggregatorFactory.finalizeComputation(agg.get(buf, pos)), 0.05); Assert.assertEquals(9L, rowAggregatorFactoryRounded.finalizeComputation(agg.get(buf, pos))); }
@SuppressWarnings("unused") // Supposedly called by Caliper public Object timeBufferAggregate(int reps) { for (int i = 0; i < reps; ++i) { agg.aggregate(buf, pos); for (final DimensionSelector selector : selectorList) { if (i % (MAX - 1) == 0) { ((CardinalityAggregatorTest.TestDimensionSelector) selector).reset(); } else { ((CardinalityAggregatorTest.TestDimensionSelector) selector).increment(); } } } return agg.get(buf, pos); }
@Override public List<AggregatorFactory> getRequiredColumns() { return fields.stream() .map( field -> new CardinalityAggregatorFactory( field.getOutputName(), null, Collections.singletonList(field), byRow, round ) ) .collect(Collectors.toList()); }
@Override public void aggregate() { if (byRow) { hashRow(selectorPluses, collector); } else { hashValues(selectorPluses, collector); } }
@Override public BufferAggregator factorizeBuffered(ColumnSelectorFactory columnFactory) { ColumnSelectorPlus<CardinalityAggregatorColumnSelectorStrategy>[] selectorPluses = DimensionHandlerUtils.createColumnSelectorPluses( STRATEGY_FACTORY, fields, columnFactory ); if (selectorPluses.length == 0) { return NoopBufferAggregator.instance(); } return new CardinalityBufferAggregator(selectorPluses, byRow); }
@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); }
private static void aggregate(List<DimensionSelector> selectorList, Aggregator agg) { agg.aggregate(); for (DimensionSelector selector : selectorList) { ((TestDimensionSelector) selector).increment(); } }
dimSpec1.getDimension(), dimSpec1.getOutputName(), new StringCardinalityAggregatorColumnSelectorStrategy(), dim1 dimSpec1.getDimension(), dimSpec1.getOutputName(), new StringCardinalityAggregatorColumnSelectorStrategy(), dim2 CardinalityAggregator agg1 = new CardinalityAggregator(dimInfo1, false); CardinalityAggregator agg2 = new CardinalityAggregator(dimInfo2, false); aggregate(selector1, agg1); aggregate(selector2, agg2); 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()
@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 testBufferAggregateValues() { CardinalityBufferAggregator agg = new CardinalityBufferAggregator( dimInfoList.toArray(new ColumnSelectorPlus[0]), false ); int maxSize = valueAggregatorFactory.getMaxIntermediateSizeWithNulls(); ByteBuffer buf = ByteBuffer.allocate(maxSize + 64); int pos = 10; buf.limit(pos + maxSize); agg.init(buf, pos); for (int i = 0; i < values1.size(); ++i) { bufferAggregate(selectorList, agg, buf, pos); } Assert.assertEquals(NullHandling.replaceWithDefault() ? 7.0 : 6.0, (Double) valueAggregatorFactory.finalizeComputation(agg.get(buf, pos)), 0.05); Assert.assertEquals(NullHandling.replaceWithDefault() ? 7L : 6L, rowAggregatorFactoryRounded.finalizeComputation(agg.get(buf, pos))); }
@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 AggregateCombiner makeAggregateCombiner() { return new HyperLogLogCollectorAggregateCombiner(); }
private static void bufferAggregate( List<DimensionSelector> selectorList, BufferAggregator agg, ByteBuffer buf, int pos ) { agg.aggregate(buf, pos); for (DimensionSelector selector : selectorList) { ((TestDimensionSelector) selector).increment(); } }
@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); }
@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())); }