diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCount.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCount.java index 2d7cc8d890..c2414d2d71 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCount.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCount.java @@ -153,7 +153,7 @@ public AggregationBuffer getNewAggregationBuffer() throws HiveException { @Override public void reset(AggregationBuffer agg) throws HiveException { ((CountAgg) agg).value = 0; - ((CountAgg) agg).uniqueObjects = new HashSet(); + ((CountAgg) agg).uniqueObjects = null; } @Override @@ -177,7 +177,11 @@ public void iterate(AggregationBuffer agg, Object[] parameters) // Skip the counting if the values are the same for windowing COUNT(DISTINCT) case if (countThisRow && isWindowingDistinct()) { + if (((CountAgg) agg).uniqueObjects == null) { + ((CountAgg) agg).uniqueObjects = new HashSet(); + } HashSet uniqueObjs = ((CountAgg) agg).uniqueObjects; + ObjectInspectorObject obj = new ObjectInspectorObject( ObjectInspectorUtils.copyToStandardObject(parameters, inputOI, ObjectInspectorCopyOption.JAVA), outputOI); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java index 1439b64e97..e30b903496 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java @@ -184,6 +184,9 @@ protected boolean isEligibleValue(SumAgg agg, Object input) { } if (isWindowingDistinct()) { + if (agg.uniqueObjects == null) { + agg.uniqueObjects = new HashSet(); + } HashSet uniqueObjs = agg.uniqueObjects; ObjectInspectorObject obj = input instanceof ObjectInspectorObject ? (ObjectInspectorObject)input : @@ -266,7 +269,7 @@ public void reset(AggregationBuffer agg) throws HiveException { SumAgg bdAgg = (SumAgg) agg; bdAgg.empty = true; bdAgg.sum = new HiveDecimalWritable(0); - bdAgg.uniqueObjects = new HashSet(); + bdAgg.uniqueObjects = null; } boolean warned = false; @@ -410,7 +413,7 @@ public void reset(AggregationBuffer agg) throws HiveException { SumDoubleAgg myagg = (SumDoubleAgg) agg; myagg.empty = true; myagg.sum = 0.0; - myagg.uniqueObjects = new HashSet(); + myagg.uniqueObjects = null; } boolean warned = false; @@ -540,7 +543,7 @@ public void reset(AggregationBuffer agg) throws HiveException { SumLongAgg myagg = (SumLongAgg) agg; myagg.empty = true; myagg.sum = 0L; - myagg.uniqueObjects = new HashSet(); + myagg.uniqueObjects = null; } private boolean warned = false;