내가 임팔라/하이브 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를 만들려면 어떻게해야합니까? 감사!