[Hive 6] Hive 사용자 정의 함수 (UDF)
4338 단어 사용자 정의 함수
하 이브 는 Hadoop 의 MapReduce 를 기반 으로 HQL 조 회 를 제공 하 는 데이터 창고 다.Hive 는 매우 개방 적 인 시스템 으로 많은 내용 이 사용자 의 맞 춤 형 제작 을 지원 합 니 다.
2. UDF 사용법
package org.apache.hadoop.hive.ql.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
public abstract class UDFMath extends UDF {
private final DoubleWritable doubleWritable = new DoubleWritable();
public UDFMath() {
}
/**
* For subclass to implement.
*/
public abstract DoubleWritable evaluate(DoubleWritable a);
/**
* Convert HiveDecimal to a double and call evaluate() on it.
*/
public final DoubleWritable evaluate(HiveDecimalWritable writable) {
if (writable == null) {
return null;
}
double d = writable.getHiveDecimal().bigDecimalValue().doubleValue();
doubleWritable.set(d);
return evaluate(doubleWritable);
}
}
package org.apache.hadoop.hive.ql.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedExpressions;
import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.FuncSinDoubleToDouble;
import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.FuncSinLongToDouble;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
/**
* UDFSin.
*
*/
@Description(name = "sin",
value = "_FUNC_(x) - returns the sine of x (x is in radians)",
extended = "Example:
"
+ " > SELECT _FUNC_(0) FROM src LIMIT 1;
" + " 0")
@VectorizedExpressions({FuncSinLongToDouble.class, FuncSinDoubleToDouble.class})
public class UDFSin extends UDFMath {
private final DoubleWritable result = new DoubleWritable();
public UDFSin() {
}
/**
* Take Sine of a.
*/
public DoubleWritable evaluate(DoubleWritable a) {
if (a == null) {
return null;
} else {
result.set(Math.sin(a.get()));
return result;
}
}
}
위 에는 정 현 을 구 하 는 UDF 함수 가 사용자 정의 되 어 있 습 니 다.
4. 사용자 정의 함수 UDF 사용 방법
hive>add jar /user/hadoop/udf.math.sin.jar;
hive>CREATE TEMPORARY FUNCTION math.sin AS 'org.apache.hadoop.hive.ql.udf.UDFSin';
SELECT math.sin(3.14) FROM word;
hive> DROP TEMPORARY FUNCTION math.sin;
5. UDF 를 하 이브 로 영구 등록
org.apache.hadoop.hive.ql.udf.UDFMath
org.apache.hadoop.hive.ql.udf.UDFSin
등록 함수 추가 문
registerFunction("udf_math_sina", UDFSin.class)