public DoublesSketchMergeAggregator(final ColumnValueSelector<DoublesSketch> selector, final int k) { this.selector = selector; union = DoublesUnion.builder().setMaxK(k).build(); }
private final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build();
@Override public DoublesUnion deserialise(final byte[] bytes) throws SerialisationException { final DoublesUnion union = DoublesUnion.builder().build(); union.update(WritableMemory.wrap(bytes)); return union; }
@Override protected DoublesUnion getEmptyExampleOutput() { return DoublesUnion.builder().build(); }
@Override public synchronized void init(final ByteBuffer buffer, final int position) { final WritableMemory mem = getMemory(buffer); final WritableMemory region = mem.writableRegion(position, maxIntermediateSize); final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build(region); putUnion(buffer, position, union); }
@Override public Object combine(final Object lhs, final Object rhs) { final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build(); union.update((DoublesSketch) lhs); union.update((DoublesSketch) rhs); return union.getResultAndReset(); }
@Override protected DoublesSketch _apply(final DoublesSketch a, final DoublesSketch b) { final DoublesUnion union = DoublesUnion.builder().setMaxK(a.getK()).build(); union.update(a); union.update(b); return union.getResult(); } }
@Override protected DoublesUnion getExampleOutput() { final DoublesUnion union = DoublesUnion.builder().build(); union.update(1.0D); union.update(2.0D); union.update(3.0D); return union; }
@Test public void isSameResourceHeap() { DoublesUnion union = DoublesUnion.builder().build(); Assert.assertFalse(union.isSameResource(null)); }
@Test public void isSameResourceDirect() { WritableMemory mem1 = WritableMemory.wrap(new byte[1000000]); DoublesUnion union = DoublesUnion.builder().build(mem1); Assert.assertTrue(union.isSameResource(mem1)); WritableMemory mem2 = WritableMemory.wrap(new byte[1000000]); Assert.assertFalse(union.isSameResource(mem2)); }
@Test public void updateWithDoubleValueOnly() { final DoublesUnion union = DoublesUnion.builder().build(); union.update(123.456); final DoublesSketch qs = union.getResultAndReset(); assertEquals(qs.getN(), 1); }
@Test public void emptyUnionSerDeIssue195() { DoublesUnion union = DoublesUnion.builder().build(); byte[] byteArr = union.toByteArray(); Memory mem = Memory.wrap(byteArr); DoublesUnion union2 = DoublesUnion.heapify(mem); Assert.assertEquals(mem.getCapacity(), 8L); Assert.assertTrue(union2.isEmpty()); }
@Test public void differentLargerK() { final DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); final UpdateDoublesSketch sketch1 = buildAndLoadQS(256, 0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void differentLargerKDirect() { final DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); final UpdateDoublesSketch sketch1 = buildAndLoadDQS(256, 0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void mergeTest() { DoublesSketch dqs1 = buildAndLoadDQS(128, 256); DoublesSketch dqs2 = buildAndLoadDQS(128, 256, 256); DoublesUnion union = DoublesUnion.builder().setMaxK(128).build(); union.update(dqs1); union.update(dqs2); DoublesSketch result = union.getResult(); double median = result.getQuantile(0.5); println("Median: " + median); assertEquals(median, 258.0, .05 * 258); }
@Test public void checkUnionUpdateLogic2Direct() { DoublesSketch qs1 = DoublesSketch.builder().build(); final DoublesSketch qs2 = DoublesSketch.builder().build(); final DoublesUnion union = DoublesUnion.builder().build(); union.update(qs1); union.update(qs2); //case 5 qs1 = buildAndLoadDQS(128, 1000); union.update(qs1); union.update(qs2); //case 9 final DoublesSketch result = union.getResult(); //println(union.toString(true, true)); assertEquals(result.getMaxValue(), 1000.0, 0.0); assertEquals(result.getMinValue(), 1.0, 0.0); }
@Test public void checkUnionUpdateLogic2() { DoublesSketch qs1 = DoublesSketch.builder().build(); final DoublesSketch qs2 = DoublesSketch.builder().build(); final DoublesUnion union = DoublesUnion.builder().build(); union.update(qs1); union.update(qs2); //case 5 qs1 = buildAndLoadQS(128, 1000); union.update(qs1); union.update(qs2); //case 9 final DoublesSketch result = union.getResult(); //println(union.toString(true, true)); assertEquals(result.getMaxValue(), 1000.0, 0.0); assertEquals(result.getMinValue(), 1.0, 0.0); }
@Test public void checkUpdateMemory() { final DoublesSketch qs1 = buildAndLoadQS(256, 1000); final int bytes = qs1.getCompactStorageBytes(); final WritableMemory dstMem = WritableMemory.wrap(new byte[bytes]); qs1.putMemory(dstMem); final Memory srcMem = dstMem; final DoublesUnion union = DoublesUnion.builder().build(); //virgin union.update(srcMem); for (int i = 1000; i < 2000; i++) { union.update(i); } final DoublesSketch qs2 = union.getResult(); assertEquals(qs2.getMaxValue(), 1999, 0.0); final String s = union.toString(); println(s); //enable printing to see union.reset(); //sets to null }
@Test public void checkUpdateMemoryDirect() { final DoublesSketch qs1 = buildAndLoadDQS(256, 1000); final int bytes = qs1.getCompactStorageBytes(); final WritableMemory dstMem = WritableMemory.wrap(new byte[bytes]); qs1.putMemory(dstMem); final Memory srcMem = dstMem; final DoublesUnion union = DoublesUnion.builder().build(); //virgin union.update(srcMem); for (int i = 1000; i < 2000; i++) { union.update(i); } final DoublesSketch qs2 = union.getResult(); assertEquals(qs2.getMaxValue(), 1999, 0.0); final String s = union.toString(); println(s); //enable printing to see union.reset(); //sets to null }