HIVE函数UDAF

1.模拟mysql group_concat函数

package com.lixg.udaf;

import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;

public class Wm_concat extends UDAF {

	public static class myUDAFEval implements UDAFEvaluator{

		private PartialResult partial = new PartialResult();
		public static class PartialResult{
			String result = "" ;
			String delimiter = null;
		}
		@Override
		public void init() {
			partial.result = "";
		}
		public  boolean  iterate(String value, String deli){
			if (value == null || "null".equalsIgnoreCase(value)) {
				return true;
			}
			if (partial.delimiter == null) {
				partial.delimiter = deli;
			}
			if (partial.result.length() > 0) {
				partial.result = partial.result.concat(partial.delimiter);
			}
			partial.result = partial.result.concat(value);
			return true;
		}
		public  PartialResult  terminatePartial() {
			return partial;
		}
		public  boolean  merge(PartialResult other){
			if (other == null) {
				return true;
			}
			if (partial.delimiter == null) {
				partial.delimiter = other.delimiter ;
				partial.result = other.result ;
			}else {
				if(partial.result.length() > 0){
					partial.result = partial.result.concat(partial.delimiter);
				}
				partial.result = partial.result.concat(other.result);
			}
			return true ;
		}
		public String terminate() {
			if (partial == null || partial.result.length() == 0) {
				return null;
			}
			return partial.result ;
		}
	}
}

 

你可能感兴趣的:(hive udaf)