datasketches quantiles module - implemented makeAggregateCombiner (#6882)

* implemented makeAggregateCombiner

* fixed import order
This commit is contained in:
Alexander Saydakov 2019-01-17 14:09:55 -08:00 committed by Fangjin Yang
parent 9f0fdcfef6
commit 161dac1d23
1 changed files with 39 additions and 0 deletions

View File

@ -25,17 +25,20 @@ import com.yahoo.sketches.Util;
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;
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;
@ -137,6 +140,42 @@ public class DoublesSketchAggregatorFactory extends AggregatorFactory
return union.getResultAndReset();
}
@Override
public AggregateCombiner makeAggregateCombiner()
{
return new ObjectAggregateCombiner<DoublesSketch>()
{
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<DoublesSketch> classOfObject()
{
return DoublesSketch.class;
}
};
}
@Override
@JsonProperty
public String getName()