我正在研究Impala / Hive 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以String作为输入,以String作为输出。理想情况下,它应该看起来像:
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类的情况下使用字符串类型的输入/输出创建udf?谢谢!
最佳答案
毛 bean 。可能可以使用org.apache.hadoop.io.Text类。
您可以引用Hive的内置功能之一。我指的是Trim,它接受字符串并输出字符串
https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseTrim.java
关于hadoop - 具有字符串输入/输出的Hive/Impala UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114112/