UDAF 사례
30 분 동안 action 수집id, list 로 집합
4.0.0
netease.bigdata.course
etl
pom
1.0-SNAPSHOT
UTF-8
UTF-8
org.apache.hadoop
hadoop-client
2.7.6
provided
com.alibaba
fastjson
1.2.4
org.anarres.lzo
lzo-hadoop
1.0.0
org.apache.hive
hive-exec
1.2.2
provided
org.apache.hive
hive-contrib
1.2.2
provided
junit
junit
4.12
src/main/java
org.apache.maven.plugins
maven-assembly-plugin
jar-with-dependencies
make-assembly
package
single
org.apache.maven.plugins
maven-compiler-plugin
6
6
package com.bigdata.etl.udf;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
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.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StandardMapObjectInspector;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UDAFCollectIn30Minutes extends AbstractGenericUDAFResolver {
@Override
public GenericUDAFEvaluator getEvaluator(TypeInfo[] info) throws SemanticException {
if (info.length != 2) {
throw new UDFArgumentTypeException(info.length - 1, "Exactly two arguments is expected.");
}
if (info[0].getCategory() != ObjectInspector.Category.PRIMITIVE) {
throw new UDFArgumentTypeException(0, "Only primitive type arguments are accepted.");
}
if (info[1].getCategory() != ObjectInspector.Category.PRIMITIVE) {
throw new UDFArgumentTypeException(0, "Only primitive type arguments are accepted.");
}
return new CollectActiveNameUDAFEvaluator();
}
public static class CollectActiveNameUDAFEvaluator extends GenericUDAFEvaluator {
protected PrimitiveObjectInspector inputKeyOI; // 0
protected PrimitiveObjectInspector inputValueOI; // 1
protected StandardMapObjectInspector internalMergeOI;
@Override
public ObjectInspector init(Mode m, ObjectInspector[] parameters) throws HiveException {
super.init(m, parameters);
if (m == Mode.PARTIAL1) {
inputKeyOI = (PrimitiveObjectInspector) parameters[0];
inputValueOI = (PrimitiveObjectInspector) parameters[1];
return ObjectInspectorFactory.getStandardMapObjectInspector(ObjectInspectorUtils.getStandardObjectInspector(inputKeyOI), ObjectInspectorUtils.getStandardObjectInspector(inputValueOI));
} else if (m == Mode.PARTIAL2) {
internalMergeOI = (StandardMapObjectInspector) parameters[0];
inputKeyOI = (PrimitiveObjectInspector) internalMergeOI.getMapKeyObjectInspector();
inputValueOI = (PrimitiveObjectInspector) internalMergeOI.getMapValueObjectInspector();
return ObjectInspectorUtils.getStandardObjectInspector(internalMergeOI);
} else if (m == Mode.FINAL) {
internalMergeOI = (StandardMapObjectInspector) parameters[0];
inputKeyOI = (PrimitiveObjectInspector) internalMergeOI.getMapKeyObjectInspector();
inputValueOI = (PrimitiveObjectInspector) internalMergeOI.getMapValueObjectInspector();
return ObjectInspectorFactory.getStandardListObjectInspector(inputValueOI);
} else { // COMPLETE timeTag active_name
inputKeyOI = (PrimitiveObjectInspector) parameters[0];
inputValueOI = (PrimitiveObjectInspector) parameters[1];
return ObjectInspectorFactory.getStandardListObjectInspector(inputValueOI);
}
}
static class activeNameMapTimeAgg extends AbstractAggregationBuffer {
Map
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바를 잡아버려 (1)나의 생각을 적고 복습을 해버릴 것 이다 책을 펼치자 마자 나오는 설명인데 그 안의 내용을 실행하게 된다 라고 설명을 해준다 아래 소스코드와 실행 결과로 위에 설명을 보충해준다 사칙연산과 나머지를 계산하는 것 비교연...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.