蜂巢/因帕拉UDF与字符串输入/输出

问题描述:

我期待到帕拉/蜂巢UDF的例子,例如:蜂巢/因帕拉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,它有字符串作为输入和字符串作为输出。理想情况下,它应该看起来像:

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; 

我如何用字符串类型的输入/输出UDF不StringWritable类?谢谢!

毛豆。可能你可以使用org.apache.hadoop.io.Text类。

你可以参考一下Hive的内置函数。我提到修剪这需要字符串输出字符串

https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseTrim.java

原来只是使用输入Java的String类型/输出将正常工作。

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

附加帕拉DOC:http://impala.io/doc/html/TestUdf_8java_source.html