Hive UDF 문자열 디코딩 함수

사실hive의udf는 비교적 실현하기 쉽다. UDF를 계승하여evaluate() 방법을 실현하면 코드는 다음과 같다.
@Description(name = "decoder_url", value = "_FUNC_(url [,code][,count]) - decoder a URL from a String for count times using code as encoding scheme ", extended = ""
    + "if count is not given ,the url will be decoderd for 2 time,"
    + "if code is not given ,GBK is used")
public class UDFDecoderUrl extends UDF {
  private String url = null;
  private int times = 2;
  private String code = "GBK";

  public UDFDecoderUrl() {
  }

  public String evaluate(String urlStr, String srcCode, int count) {
    if (urlStr == null) {
      return null;
    }
    if (count <= 0) {
      return urlStr;
    }
    if (srcCode != null) {
      code = srcCode;
    }
    url = urlStr;
    times = count;
    for (int i = 0; i < times; i++) {
      url = decoder(url, code);
    }
    return url;
  }

  public String evaluate(String urlStr, String srcCode) {
    if (urlStr == null) {
      return null;
    }
    url = urlStr;
    code = srcCode;
    return evaluate(url, code,times);
  }

  public String evaluate(String urlStr, int count) {
    if (urlStr == null) {
      return null;
    }
    if (count <= 0) {
      return urlStr;
    }
    url = urlStr;
    times = count;
    
    return evaluate(url, code,times);
  }

  public String evaluate(String urlStr) {
    if (urlStr == null) {
      return null;
    }
    url = urlStr;
    return evaluate(url, code,times);
  }

  private String decoder(String urlStr, String code) {
    if (urlStr == null || code == null) {
      return null;
    }
    try {
      urlStr = URLDecoder.decode(urlStr, code);
    } catch (Exception e) {
      return null;
    }
    return urlStr;
  }
}

클래스에서 org.apache.hadoop.hive.ql.exec.FunctionRegistry에 추가
    registerUDF("decoder_url", UDFDecoderUrl.class, false);
Hive를 컴파일하거나 프로필 방식을 통해 읽게 하거나, 이후에 새로 추가된 함수를 프로필에 설정하면 영원히 편안하게 할 수 있습니다.
 
위의 클래스 UDF Decoder Url은jar 패키지로hive에 불러와야 하고,hive-site가 필요합니다.xml 설정은 다음과 같은jar 패키지를 불러옵니다
  hive.aux.jars.path   file:///opt/hive/sohu/hive-udf-0.0.1.jar   These JAR file are available to all users for all jobs

좋은 웹페이지 즐겨찾기