hadoop - 具有字符串输入/输出的Hive/Impala UDF

标签 hadoop hive impala udf

我正在研究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/

相关文章:

jdbc - 为 hive jdbc 连接添加超时

sql - 从 HDFS 上的 csv 创建外部表,所有值都带有引号

serialization - 将 JAXB 对象加载到 Apache Hive/Impala

Hadoop 与 SAS 的连接

java - Impala 通过 jdbc 使元数据失效

带有隐藏 key 对的 Hadoop distcp 到 S3a

hadoop - HDFS 占用空间 : "hdfs dfs -du/" vs "hdfs dfsadmin -report"

hadoop - 如何为单个配置单元表创建事实和维度表以及增量数据

java - Hadoop ArrayWritable 给我一个 ClassCastException

hadoop - 有没有办法为预期的输出编写配置单元脚本