case "stddev": case "stddev_pop": evaluator = new GenericUDAFStd.GenericUDAFStdEvaluator(); break; case "stddev_samp":
@Override public Object terminate(AggregationBuffer agg) throws HiveException { StdAgg myagg = (StdAgg) agg; if (myagg.count == 0) { // SQL standard - return null for zero elements return null; } else { if (myagg.count > 1) { getResult().set(Math.sqrt(myagg.variance / (myagg.count))); } else { // for one element the variance is always 0 getResult().set(0); } return getResult(); } } }
public static double calculateVarianceFamilyResult(double variance, long count, VarianceKind varianceKind) { final double result; switch (varianceKind) { case VARIANCE: result = GenericUDAFVarianceEvaluator.calculateVarianceResult(variance, count); break; case VARIANCE_SAMPLE: result = GenericUDAFVarianceSampleEvaluator.calculateVarianceSampleResult(variance, count); break; case STANDARD_DEVIATION: result = GenericUDAFStdEvaluator.calculateStdResult(variance, count); break; case STANDARD_DEVIATION_SAMPLE: result = GenericUDAFStdSampleEvaluator.calculateStdSampleResult(variance, count); break; default: throw new RuntimeException("Unexpected variance kind " + varianceKind); } return result; }
case TIMESTAMP: case DECIMAL: return new GenericUDAFStdEvaluator(); case BOOLEAN: case DATE:
@Override public GenericUDAFEvaluator getEvaluator(TypeInfo[] parameters) throws SemanticException { if (parameters.length != 1) { throw new UDFArgumentTypeException(parameters.length - 1, "Exactly one argument is expected."); } if (parameters[0].getCategory() != ObjectInspector.Category.PRIMITIVE) { throw new UDFArgumentTypeException(0, "Only primitive type arguments are accepted but " + parameters[0].getTypeName() + " is passed."); } switch (((PrimitiveTypeInfo) parameters[0]).getPrimitiveCategory()) { case BYTE: case SHORT: case INT: case LONG: case FLOAT: case DOUBLE: case STRING: return new GenericUDAFStdEvaluator(); case BOOLEAN: default: throw new UDFArgumentTypeException(0, "Only numeric or string type arguments are accepted but " + parameters[0].getTypeName() + " is passed."); } }
@Override public Object terminate(AggregationBuffer agg) throws HiveException { StdAgg myagg = (StdAgg) agg; if (myagg.count == 0) { // SQL standard - return null for zero elements return null; } else { if (myagg.count > 1) { getResult().set(Math.sqrt(myagg.variance / (myagg.count))); } else { // for one element the variance is always 0 getResult().set(0); } return getResult(); } } }
@Override public Object terminate(AggregationBuffer agg) throws HiveException { StdAgg myagg = (StdAgg) agg; if (myagg.count == 0) { // SQL standard - return null for zero elements return null; } else { if (myagg.count > 1) { getResult().set(Math.sqrt(myagg.variance / (myagg.count))); } else { // for one element the variance is always 0 getResult().set(0); } return getResult(); } } }
case TIMESTAMP: case DECIMAL: return new GenericUDAFStdEvaluator(); case BOOLEAN: case DATE:
case TIMESTAMP: case DECIMAL: return new GenericUDAFStdEvaluator(); case BOOLEAN: case DATE:
@Override public Object terminate(AggregationBuffer agg) throws HiveException { StdAgg myagg = (StdAgg) agg; if (myagg.count == 0) { // SQL standard - return null for zero elements return null; } else { if (myagg.count > 1) { getResult().set( calculateStdResult(myagg.variance, myagg.count)); } else { // for one element the variance is always 0 getResult().set(0); } return getResult(); } } }