Search in sources :

Example 36 with Clip

use of com.yahoo.bullet.result.Clip in project bullet-core by yahoo.

the class FrequentItemsSketchTest method testApproximateCounting.

@Test
public void testApproximateCounting() {
    FrequentItemsSketch sketch = new FrequentItemsSketch(ErrorType.NO_FALSE_POSITIVES, 32, 40);
    IntStream.range(0, 40).forEach(i -> sketch.update(String.valueOf(i)));
    IntStream.of(10, 20, 25, 30).forEach(i -> IntStream.range(0, i).forEach(j -> sketch.update(String.valueOf(i))));
    Clip result = sketch.getResult("meta", ALL_METADATA);
    Map<String, Object> metadata = (Map<String, Object>) result.getMeta().asMap().get("meta");
    Assert.assertEquals(metadata.size(), 5);
    Assert.assertTrue((Boolean) metadata.get("isEst"));
    Long error = (Long) metadata.get("error");
    List<BulletRecord> records = result.getRecords();
    // We should have our four frequent items
    Assert.assertTrue(records.size() >= 4);
    for (BulletRecord actual : records) {
        Assert.assertEquals(actual.fieldCount(), 2);
        Integer item = Integer.valueOf(actual.get(FrequentItemsSketch.ITEM_FIELD).toString());
        Long count = (Long) actual.get(FrequentItemsSketch.COUNT_FIELD);
        if (item == 10 || item == 20 || item == 25 || item == 30) {
            Assert.assertTrue(count >= item + 1);
            Assert.assertTrue(count <= item + 1 + error);
        } else {
            Assert.assertTrue(count >= 1);
            Assert.assertTrue(count <= 1 + error);
        }
    }
    Assert.assertEquals(sketch.getRecords(), result.getRecords());
    Assert.assertEquals(sketch.getMetadata("meta", ALL_METADATA).asMap(), result.getMeta().asMap());
}
Also used : IntStream(java.util.stream.IntStream) List(java.util.List) Assert(org.testng.Assert) BulletRecord(com.yahoo.bullet.record.BulletRecord) SketchesArgumentException(com.yahoo.sketches.SketchesArgumentException) Meta(com.yahoo.bullet.result.Meta) Map(java.util.Map) Test(org.testng.annotations.Test) HashMap(java.util.HashMap) ErrorType(com.yahoo.sketches.frequencies.ErrorType) Clip(com.yahoo.bullet.result.Clip) Family(com.yahoo.sketches.Family) Clip(com.yahoo.bullet.result.Clip) BulletRecord(com.yahoo.bullet.record.BulletRecord) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.testng.annotations.Test)

Example 37 with Clip

use of com.yahoo.bullet.result.Clip in project bullet-core by yahoo.

the class QuantileSketchTest method testUnioning.

@Test
public void testUnioning() {
    QuantileSketch sketch = new QuantileSketch(64, Distribution.Type.CDF, makePoints(0.0, 9.0, 1.0));
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 10));
    QuantileSketch anotherSketch = new QuantileSketch(64, Distribution.Type.CDF, makePoints(0.0, 9.0, 1.0));
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 3));
    QuantileSketch mergedSketch = new QuantileSketch(64, Distribution.Type.CDF, makePoints(0.0, 9.0, 1.0));
    mergedSketch.union(sketch.serialize());
    mergedSketch.union(anotherSketch.serialize());
    Clip result = mergedSketch.getResult(null, null);
    List<BulletRecord> records = result.getRecords();
    for (BulletRecord record : records) {
        String range = (String) record.get(RANGE_FIELD);
        double count = (Double) record.get(COUNT_FIELD);
        double probablity = (Double) record.get(PROBABILITY_FIELD);
        String rangeEnd = getEnd(range);
        if (rangeEnd.equals(POSITIVE_INFINITY)) {
            Assert.assertEquals(count, 60.0);
            Assert.assertEquals(probablity, 1.0);
        } else {
            double end = Double.valueOf(rangeEnd);
            if (end <= 3.0) {
                Assert.assertEquals(count, end * 13.0);
                Assert.assertEquals(probablity, end * 13.0 / 60);
            } else {
                Assert.assertEquals(count, 39.0 + (end - 3) * 3.0);
                Assert.assertEquals(probablity, (39.0 + (end - 3) * 3.0) / 60);
            }
        }
    }
}
Also used : Clip(com.yahoo.bullet.result.Clip) BulletRecord(com.yahoo.bullet.record.BulletRecord) Test(org.testng.annotations.Test)

Example 38 with Clip

use of com.yahoo.bullet.result.Clip in project bullet-core by yahoo.

the class QuantileSketchTest method testExactPMFWithNumberOfPoints.

@Test
public void testExactPMFWithNumberOfPoints() {
    QuantileSketch sketch = new QuantileSketch(64, 2, Distribution.Type.PMF, 10);
    // Insert 0, 1, 2 ... 9 three times
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 10));
    // Insert 0, 1, 2 ten times
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 3));
    Clip result = sketch.getResult("meta", ALL_METADATA);
    Map<String, Object> metadata = (Map<String, Object>) result.getMeta().asMap().get("meta");
    Assert.assertEquals(metadata.size(), 7);
    Assert.assertFalse((Boolean) metadata.get("isEst"));
    Assert.assertEquals((String) metadata.get("family"), Family.QUANTILES.getFamilyName());
    // Size should be at least 10 bytes since we inserted 60 items: 10 uniques
    Assert.assertTrue((Integer) metadata.get("size") >= 10);
    Assert.assertEquals(metadata.get("nre"), DoublesSketch.getNormalizedRankError(64));
    // 60 items
    Assert.assertEquals(metadata.get("n"), 60L);
    Assert.assertEquals(metadata.get("min"), 0.0);
    Assert.assertEquals(metadata.get("max"), 9.0);
    List<BulletRecord> records = result.getRecords();
    for (BulletRecord record : records) {
        String range = (String) record.get(RANGE_FIELD);
        double count = (Double) record.get(COUNT_FIELD);
        double probablity = (Double) record.get(PROBABILITY_FIELD);
        String rangeStart = getStart(range);
        String rangeEnd = getEnd(range);
        if (rangeStart.equals(NEGATIVE_INFINITY)) {
            Assert.assertEquals(count, 0.0);
            Assert.assertEquals(probablity, 0.0);
        } else if (rangeEnd.equals(POSITIVE_INFINITY)) {
            Assert.assertEquals(count, 3.0);
            Assert.assertEquals(probablity, 1.0 / 20);
        } else {
            double start = Double.valueOf(rangeStart);
            if (start <= 2.0) {
                // 0.0 - 1.0, 1.0 - 2.0, 2.0 - 3.0 have 3 from the first, 10 from the second
                Assert.assertEquals(count, 13.0);
                Assert.assertEquals(probablity, 13.0 / 60);
            } else {
                // The rest are all 3
                Assert.assertEquals(count, 3.0);
                Assert.assertEquals(probablity, 1.0 / 20);
            }
        }
    }
    Assert.assertEquals(sketch.getRecords(), records);
    Assert.assertEquals(sketch.getMetadata("meta", ALL_METADATA).asMap(), result.getMeta().asMap());
}
Also used : Clip(com.yahoo.bullet.result.Clip) BulletRecord(com.yahoo.bullet.record.BulletRecord) HashMap(java.util.HashMap) Map(java.util.Map) Test(org.testng.annotations.Test)

Example 39 with Clip

use of com.yahoo.bullet.result.Clip in project bullet-core by yahoo.

the class QuantileSketchTest method testExactCDFWithNumberOfPoints.

@Test
public void testExactCDFWithNumberOfPoints() {
    QuantileSketch sketch = new QuantileSketch(64, 2, Distribution.Type.CDF, 10);
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 10));
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 3));
    Clip result = sketch.getResult(null, null);
    List<BulletRecord> records = result.getRecords();
    for (BulletRecord record : records) {
        String range = (String) record.get(RANGE_FIELD);
        double count = (Double) record.get(COUNT_FIELD);
        double probablity = (Double) record.get(PROBABILITY_FIELD);
        String rangeEnd = getEnd(range);
        if (rangeEnd.equals(POSITIVE_INFINITY)) {
            Assert.assertEquals(count, 60.0);
            Assert.assertEquals(probablity, 1.0);
        } else {
            double end = Double.valueOf(rangeEnd);
            if (end <= 3.0) {
                // -inf - 0.0, -inf - 1.0, -inf - 2.0, -inf - 3.0 are 13 * 0, 13 * 1, ...
                Assert.assertEquals(count, end * 13.0);
                Assert.assertEquals(probablity, end * 13.0 / 60);
            } else {
                // -inf - 4.0, -inf - 5.0 ... -inf - 9.0 are 13*3 + (1*3),  13*3 + (2*3) ...
                Assert.assertEquals(count, 39.0 + (end - 3) * 3.0);
                Assert.assertEquals(probablity, (39.0 + (end - 3) * 3.0) / 60);
            }
        }
    }
}
Also used : Clip(com.yahoo.bullet.result.Clip) BulletRecord(com.yahoo.bullet.record.BulletRecord) Test(org.testng.annotations.Test)

Example 40 with Clip

use of com.yahoo.bullet.result.Clip in project bullet-core by yahoo.

the class QuantileSketchTest method testFetchingDataWithoutResettingAndInsertingMoreData.

@Test
public void testFetchingDataWithoutResettingAndInsertingMoreData() {
    QuantileSketch sketch = new QuantileSketch(64, Distribution.Type.CDF, makePoints(0.0, 9.0, 1.0));
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 10));
    QuantileSketch anotherSketch = new QuantileSketch(64, Distribution.Type.CDF, makePoints(0.0, 9.0, 1.0));
    IntStream.range(0, 30).forEach(i -> sketch.update(i % 3));
    sketch.union(anotherSketch.serialize());
    Clip result = sketch.getResult(null, null);
    List<BulletRecord> records = result.getRecords();
    for (BulletRecord record : records) {
        String range = (String) record.get(RANGE_FIELD);
        double count = (Double) record.get(COUNT_FIELD);
        String rangeEnd = getEnd(range);
        if (rangeEnd.equals(POSITIVE_INFINITY)) {
            Assert.assertEquals(count, 60.0);
        } else {
            double end = Double.valueOf(rangeEnd);
            if (end <= 3.0) {
                Assert.assertEquals(count, end * 13.0);
            } else {
                Assert.assertEquals(count, 39.0 + (end - 3) * 3.0);
            }
        }
    }
    sketch.update(1.0);
    result = sketch.getResult(null, null);
    records = result.getRecords();
    for (BulletRecord record : records) {
        String range = (String) record.get(RANGE_FIELD);
        double count = (Double) record.get(COUNT_FIELD);
        String rangeEnd = getEnd(range);
        if (rangeEnd.equals(POSITIVE_INFINITY)) {
            Assert.assertEquals(count, 61.0);
        } else {
            double end = Double.valueOf(rangeEnd);
            if (end <= 1.0) {
                Assert.assertEquals(count, end * 13.0);
            } else if (end <= 3.0) {
                Assert.assertEquals(count, (end * 13.0) + 1);
            } else {
                Assert.assertEquals(count, 40.0 + (end - 3) * 3.0);
            }
        }
    }
}
Also used : Clip(com.yahoo.bullet.result.Clip) BulletRecord(com.yahoo.bullet.record.BulletRecord) Test(org.testng.annotations.Test)

Aggregations

Clip (com.yahoo.bullet.result.Clip)66 Test (org.testng.annotations.Test)55 BulletRecord (com.yahoo.bullet.record.BulletRecord)48 Map (java.util.Map)43 List (java.util.List)33 IntStream (java.util.stream.IntStream)33 Assert (org.testng.Assert)33 BulletConfig (com.yahoo.bullet.common.BulletConfig)32 HashMap (java.util.HashMap)30 BulletError (com.yahoo.bullet.common.BulletError)29 TestHelpers.addMetadata (com.yahoo.bullet.TestHelpers.addMetadata)28 Aggregation (com.yahoo.bullet.parsing.Aggregation)28 AggregationUtils.makeAttributes (com.yahoo.bullet.parsing.AggregationUtils.makeAttributes)28 Concept (com.yahoo.bullet.result.Meta.Concept)28 RecordBox (com.yahoo.bullet.result.RecordBox)28 Family (com.yahoo.sketches.Family)28 Arrays.asList (java.util.Arrays.asList)28 Optional (java.util.Optional)28 Pair (org.apache.commons.lang3.tuple.Pair)28 HashSet (java.util.HashSet)23