From 46633b924037d20080a02e40a105ed4f1af30b54 Mon Sep 17 00:00:00 2001 From: saydakov Date: Thu, 17 Jan 2019 10:43:21 -0800 Subject: [PATCH 1/2] implemented makeAggregateCombiner --- .../DoublesSketchAggregatorFactory.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java index 80f286b4e390..ca7b5e3cf735 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java @@ -25,11 +25,13 @@ import com.yahoo.sketches.quantiles.DoublesSketch; import com.yahoo.sketches.quantiles.DoublesUnion; import org.apache.druid.java.util.common.IAE; +import org.apache.druid.query.aggregation.AggregateCombiner; import org.apache.druid.query.aggregation.Aggregator; import org.apache.druid.query.aggregation.AggregatorFactory; import org.apache.druid.query.aggregation.AggregatorFactoryNotMergeableException; import org.apache.druid.query.aggregation.AggregatorUtil; import org.apache.druid.query.aggregation.BufferAggregator; +import org.apache.druid.query.aggregation.ObjectAggregateCombiner; import org.apache.druid.query.cache.CacheKeyBuilder; import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.ColumnValueSelector; @@ -41,6 +43,8 @@ import java.util.List; import java.util.Objects; +import javax.annotation.Nullable; + public class DoublesSketchAggregatorFactory extends AggregatorFactory { public static final Comparator COMPARATOR = @@ -137,6 +141,42 @@ public Object combine(final Object lhs, final Object rhs) return union.getResultAndReset(); } + @Override + public AggregateCombiner makeAggregateCombiner() + { + return new ObjectAggregateCombiner() + { + private final DoublesUnion union = DoublesUnion.builder().setMaxK(k).build(); + + @Override + public void reset(final ColumnValueSelector selector) + { + union.reset(); + fold(selector); + } + + @Override + public void fold(final ColumnValueSelector selector) + { + final DoublesSketch sketch = (DoublesSketch) selector.getObject(); + union.update(sketch); + } + + @Nullable + @Override + public DoublesSketch getObject() + { + return union.getResult(); + } + + @Override + public Class classOfObject() + { + return DoublesSketch.class; + } + }; + } + @Override @JsonProperty public String getName() From a7c72f2152f4209c85b1f9f0559c342970c9e49a Mon Sep 17 00:00:00 2001 From: saydakov Date: Thu, 17 Jan 2019 11:04:49 -0800 Subject: [PATCH 2/2] fixed import order --- .../datasketches/quantiles/DoublesSketchAggregatorFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java index ca7b5e3cf735..4b28e268a793 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java @@ -38,13 +38,12 @@ import org.apache.druid.segment.NilColumnValueSelector; import org.apache.druid.segment.column.ValueType; +import javax.annotation.Nullable; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Objects; -import javax.annotation.Nullable; - public class DoublesSketchAggregatorFactory extends AggregatorFactory { public static final Comparator COMPARATOR =