使用例子:
add jar some.jar;
create temporary function lr as'com.some.hive.LineRegressUdaf';
select lr(2+rand(),value+rand()) from testlog group by null;
[-7.134571349134458,0.006797483277215196]
java源码:
package com.some.hive;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import com.some.hive.aggbuffer.LineAggregationBuffer;
import com.some.math.equation.EquationsSolver;
import com.some.math.equation.SingularSolver;
public class LineRegress extends AbstractGenericUDAFResolver {
@Override
public GenericUDAFEvaluator getEvaluator(TypeInfo[] arg0)
throws SemanticException {
return new Evaluator();
}
public static class Evaluator extends GenericUDAFEvaluator {
private StandardStructObjectInspector structoi;
private StandardListObjectInspector xxoi;
private StandardListObjectInspector xyoi;
private int n = 0;
@Override
public AggregationBuffer getNewAggregationBuffer() throws HiveException {
return new LineAggregationBuffer();
}
@Override
public ObjectInspector init(M