2016-08-24 3 views
0

내가 임팔라/하이브 UDF 사례를 조사하고, 예컨대 :는 문자열 입력/출력

public class FuzzyEqualsUdf extends UDF { 
    public FuzzyEqualsUdf() { 
    } 

    public BooleanWritable evaluate(DoubleWritable x, DoubleWritable y) { 
     double EPSILON = 0.000001f; 
     if (x == null || y == null) 
      return null; 
     return new BooleanWritable(Math.abs(x.get() - y.get()) < EPSILON); 
    } 
} 

와 하이브/임팔라 UDF는 그럼 출력으로 입력 문자열로 문자열을 가지고 내 자신의 UDF를 만들려고. 이상적으로 다음과 같이 표시되어야합니다.

public class MyUdf extends UDF { 
    public MyUdf() { 
    } 

    public StringWritable evaluate(StringWritable x) { 
     String[] y = x.split(","); 
     String z = y[0] + "|" + y[1] 
     return new StringWritable(z); 
    } 
} 

그러나 내 문제는 StringWritable 클래스가 아닙니다. 나만 볼 수 있습니다 :

import org.apache.hadoop.hive.serde2.io.ByteWritable; 
import org.apache.hadoop.hive.serde2.io.DoubleWritable; 
import org.apache.hadoop.hive.serde2.io.ShortWritable; 
import org.apache.hadoop.hive.serde2.io.TimestampWritable; 

StringWritable 클래스없이 String 유형 입/출력으로 udf를 만들려면 어떻게해야합니까? 감사!

답변

0

문자열 출력 문자열을 사용하는 트림 언급/출력 잘 작동합니다.

public String evaluate(String x) { 
    String[] y = x.split(","); 
    String z = y[0] + "|" + y[1] 
    return new StringWritable(z); 
} 

추가 임팔라 문서 : http://impala.io/doc/html/TestUdf_8java_source.html