From 52427f9bf4ab083bd2c78191d2bd733884e3d7a9 Mon Sep 17 00:00:00 2001 From: saydakov Date: Wed, 1 Aug 2018 13:12:34 -0700 Subject: [PATCH 1/3] implemented makeAggregateCombiner() --- ...ArrayOfDoublesSketchAggregatorFactory.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java index 2610084d7b81..5b02f551ed37 100644 --- a/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java @@ -32,15 +32,18 @@ import com.google.common.base.Preconditions; import io.druid.java.util.common.IAE; +import io.druid.query.aggregation.AggregateCombiner; import io.druid.query.aggregation.Aggregator; import io.druid.query.aggregation.AggregatorFactory; import io.druid.query.aggregation.AggregatorUtil; import io.druid.query.aggregation.BufferAggregator; +import io.druid.query.aggregation.ObjectAggregateCombiner; import io.druid.query.cache.CacheKeyBuilder; import io.druid.query.dimension.DefaultDimensionSpec; import io.druid.segment.BaseDoubleColumnValueSelector; import io.druid.segment.BaseObjectColumnValueSelector; import io.druid.segment.ColumnSelectorFactory; +import io.druid.segment.ColumnValueSelector; import io.druid.segment.DimensionSelector; import io.druid.segment.DimensionSelectorUtils; import io.druid.segment.NilColumnValueSelector; @@ -173,6 +176,42 @@ public Object combine(@Nullable final Object lhs, @Nullable final Object rhs) return union.getResult(); } + @Override + public AggregateCombiner makeAggregateCombiner() + { + return new ObjectAggregateCombiner() + { + private final ArrayOfDoublesUnion union = new ArrayOfDoublesSetOperationBuilder().setNominalEntries(nominalEntries) + .setNumberOfValues(numberOfValues).buildUnion(); + + @Override + public void reset(ColumnValueSelector selector) + { + union.reset(); + fold(selector); + } + + @Override + public void fold(ColumnValueSelector selector) + { + final ArrayOfDoublesSketch sketch = (ArrayOfDoublesSketch) selector.getObject(); + union.update(sketch); + } + + @Override + public ArrayOfDoublesSketch getObject() + { + return union.getResult(); + } + + @Override + public Class classOfObject() + { + return ArrayOfDoublesSketch.class; + } + }; + } + @Override @JsonProperty public String getName() From f133d4c0e189e7b448ab3ac560425c99bbafc011 Mon Sep 17 00:00:00 2001 From: saydakov Date: Wed, 8 Aug 2018 13:22:13 -0700 Subject: [PATCH 2/3] test for makeAggregateCombiner() --- ...ArrayOfDoublesSketchAggregatorFactory.java | 4 +- ...yOfDoublesSketchAggregatorFactoryTest.java | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java diff --git a/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java index 5b02f551ed37..1ce5adc9b36f 100644 --- a/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java @@ -185,14 +185,14 @@ public AggregateCombiner makeAggregateCombiner() .setNumberOfValues(numberOfValues).buildUnion(); @Override - public void reset(ColumnValueSelector selector) + public void reset(final ColumnValueSelector selector) { union.reset(); fold(selector); } @Override - public void fold(ColumnValueSelector selector) + public void fold(final ColumnValueSelector selector) { final ArrayOfDoublesSketch sketch = (ArrayOfDoublesSketch) selector.getObject(); union.update(sketch); diff --git a/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java b/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java new file mode 100644 index 000000000000..b71ee6fbf368 --- /dev/null +++ b/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java @@ -0,0 +1,40 @@ +package io.druid.query.aggregation.datasketches.tuple; + +import org.junit.Assert; +import org.junit.Test; + +import com.yahoo.sketches.tuple.ArrayOfDoublesSketch; +import com.yahoo.sketches.tuple.ArrayOfDoublesUpdatableSketch; +import com.yahoo.sketches.tuple.ArrayOfDoublesUpdatableSketchBuilder; + +import io.druid.query.aggregation.AggregateCombiner; +import io.druid.query.aggregation.AggregatorFactory; +import io.druid.query.aggregation.TestObjectColumnSelector; + +public class ArrayOfDoublesSketchAggregatorFactoryTest +{ + + @Test + public void makeAggregateCombiner() { + AggregatorFactory aggregatorFactory = new ArrayOfDoublesSketchAggregatorFactory("", "", null, null, null); + AggregatorFactory combiningFactory = aggregatorFactory.getCombiningFactory(); + AggregateCombiner combiner = combiningFactory.makeAggregateCombiner(); + + ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder().build(); + sketch1.update("a", new double[] {1}); + + ArrayOfDoublesUpdatableSketch sketch2 = new ArrayOfDoublesUpdatableSketchBuilder().build(); + sketch2.update("b", new double[] {1}); + sketch2.update("c", new double[] {1}); + + TestObjectColumnSelector selector = new TestObjectColumnSelector(new ArrayOfDoublesSketch[] {sketch1, sketch2}); + + combiner.reset(selector); + Assert.assertEquals(1, combiner.getObject().getEstimate(), 0); + + selector.increment(); + combiner.fold(selector); + Assert.assertEquals(3, combiner.getObject().getEstimate(), 0); + } + +} From 136c0cda019057b068c4d7decb092f3ce5861b67 Mon Sep 17 00:00:00 2001 From: saydakov Date: Wed, 8 Aug 2018 15:34:59 -0700 Subject: [PATCH 3/3] license, style fix --- ...yOfDoublesSketchAggregatorFactoryTest.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java b/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java index b71ee6fbf368..d11d8f0cd619 100644 --- a/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java +++ b/extensions-core/datasketches/src/test/java/io/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactoryTest.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package io.druid.query.aggregation.datasketches.tuple; import org.junit.Assert; @@ -15,7 +34,8 @@ public class ArrayOfDoublesSketchAggregatorFactoryTest { @Test - public void makeAggregateCombiner() { + public void makeAggregateCombiner() + { AggregatorFactory aggregatorFactory = new ArrayOfDoublesSketchAggregatorFactory("", "", null, null, null); AggregatorFactory combiningFactory = aggregatorFactory.getCombiningFactory(); AggregateCombiner combiner = combiningFactory.makeAggregateCombiner();