2016-08-24 2 views
0

Я ищу в примеры Impala/Hive UDF и т.д .:Hive/Impala 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 класса? Благодаря!

ответ

0

Оказывается, только с помощью типа Java Строка для ввода/вывода будет работать нормально.

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

Дополнительный Impala документ: http://impala.io/doc/html/TestUdf_8java_source.html

Смежные вопросы