@OutputFunction("map(real,real)") public static void output(@AggregationState DoubleHistogramAggregation.State state, BlockBuilder out) { if (state.get() == null) { out.appendNull(); } else { Map<Double, Double> value = state.get().getBuckets(); BlockBuilder entryBuilder = out.beginBlockEntry(); for (Map.Entry<Double, Double> entry : value.entrySet()) { REAL.writeLong(entryBuilder, floatToRawIntBits(entry.getKey().floatValue())); REAL.writeLong(entryBuilder, floatToRawIntBits(entry.getValue().floatValue())); } out.closeEntry(); } } }
@Test public void testMergeSame() { NumericHistogram histogram = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram.add(i); } Map<Double, Double> expected = Maps.transformValues(histogram.getBuckets(), value -> value * 2); histogram.mergeWith(histogram); assertEquals(histogram.getBuckets(), expected); }
@Test public void testSameValues() { NumericHistogram histogram = new NumericHistogram(4); for (int i = 0; i < 100; ++i) { histogram.add(1.0, 3); histogram.add(2.0, 5); } Map<Double, Double> expected = ImmutableMap.<Double, Double>builder() .put(1.0, 300.0) .put(2.0, 500.0) .build(); assertEquals(histogram.getBuckets(), expected); }
@Test public void testRoundtrip() { NumericHistogram histogram = new NumericHistogram(100, 20); for (int i = 0; i < 1000; i++) { histogram.add(i); } Slice serialized = histogram.serialize(); NumericHistogram deserialized = new NumericHistogram(serialized, 20); assertEquals(deserialized.getBuckets(), histogram.getBuckets()); }
@OutputFunction("map(double,double)") public static void output(@AggregationState State state, BlockBuilder out) { if (state.get() == null) { out.appendNull(); } else { Map<Double, Double> value = state.get().getBuckets(); BlockBuilder entryBuilder = out.beginBlockEntry(); for (Map.Entry<Double, Double> entry : value.entrySet()) { DoubleType.DOUBLE.writeDouble(entryBuilder, entry.getKey()); DoubleType.DOUBLE.writeDouble(entryBuilder, entry.getValue()); } out.closeEntry(); } } }
@Test public void testMergeDifferent() { NumericHistogram histogram1 = new NumericHistogram(10, 3); NumericHistogram histogram2 = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram1.add(i); histogram2.add(i + 1000); } NumericHistogram expected = new NumericHistogram(10, 1000); for (Map.Entry<Double, Double> entry : histogram1.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } for (Map.Entry<Double, Double> entry : histogram2.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } expected.compact(); histogram1.mergeWith(histogram2); assertEquals(histogram1.getBuckets(), expected.getBuckets()); } }
.build(); assertEquals(histogram.getBuckets(), expected);
@Test public void testMergeSame() throws Exception { NumericHistogram histogram = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram.add(i); } Map<Double, Double> expected = Maps.transformValues(histogram.getBuckets(), value -> value * 2); histogram.mergeWith(histogram); assertEquals(histogram.getBuckets(), expected); }
@Test public void testRoundtrip() throws Exception { NumericHistogram histogram = new NumericHistogram(100, 20); for (int i = 0; i < 1000; i++) { histogram.add(i); } Slice serialized = histogram.serialize(); NumericHistogram deserialized = new NumericHistogram(serialized, 20); assertEquals(deserialized.getBuckets(), histogram.getBuckets()); }
@Test public void testSameValues() throws Exception { NumericHistogram histogram = new NumericHistogram(4); for (int i = 0; i < 100; ++i) { histogram.add(1.0, 3); histogram.add(2.0, 5); } Map<Double, Double> expected = ImmutableMap.<Double, Double>builder() .put(1.0, 300.0) .put(2.0, 500.0) .build(); assertEquals(histogram.getBuckets(), expected); }
@OutputFunction("map(double,double)") public static void output(State state, BlockBuilder out) { if (state.get() == null) { out.appendNull(); } else { Map<Double, Double> value = state.get().getBuckets(); BlockBuilder blockBuilder = DoubleType.DOUBLE.createBlockBuilder(new BlockBuilderStatus(), value.size() * 2); for (Map.Entry<Double, Double> entry : value.entrySet()) { DoubleType.DOUBLE.writeDouble(blockBuilder, entry.getKey()); DoubleType.DOUBLE.writeDouble(blockBuilder, entry.getValue()); } Block block = blockBuilder.build(); out.writeObject(block); out.closeEntry(); } } }
.build(); assertEquals(histogram.getBuckets(), expected);
@Test public void testMergeDifferent() throws Exception { NumericHistogram histogram1 = new NumericHistogram(10, 3); NumericHistogram histogram2 = new NumericHistogram(10, 3); for (int i = 0; i < 1000; i++) { histogram1.add(i); histogram2.add(i + 1000); } NumericHistogram expected = new NumericHistogram(10, 1000); for (Map.Entry<Double, Double> entry : histogram1.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } for (Map.Entry<Double, Double> entry : histogram2.getBuckets().entrySet()) { expected.add(entry.getKey(), entry.getValue()); } expected.compact(); histogram1.mergeWith(histogram2); assertEquals(histogram1.getBuckets(), expected.getBuckets()); } }