Hive构建UDF(User-Defined Function)

Hive提供内建的UDAF和UDTF函数供我们使用,一般而言,这些函数就已经够平常使用了,但是遇到一些特殊的场景,这些函数就不够用了。Hive提供了UDF使我们能够自己构建函数进行功能扩展。

构建UDF的步骤

  • 使用maven创建工程HiveUDF
  • 添加 hadoop-common-2.6.0hive-exec-1.2.1 依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>3.2.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>1.2.1</version>
    </dependency>
  • 编写UDF类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.io.Text;
    public class ReverseString extends UDF {
    public Text evaluate(final Text text) {
    if (text == null) { return null; }
    StringBuilder stringBuilder = new StringBuilder(text.toString()); String reverse = stringBuilder.reverse().toString();
    return new Text(reverse);
    }
    }
  • 编译打包成jar(依赖的类也要打包进jar)

mvn clean package -DskipTests

  • 将jar包注册到Hive中并查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    hive> add jars /workspace/java-workspace/charlie/target/charlie-1.0-SNAPSHOT.jar;
    hive> list jars;
    # 临时会话使用
    hive> create temporary function string_reverse as 'com.ocean.charlie.StringReverse';
    hive> show functions like 'string_reverse';
    hive> select string_reverse('我爱中国');
    #永久使用
    hive> create function default.string_reverse as 'com.ocean.charlie.StringReverse' using jar 'hdfs:///tmp/charlie-1.0-SNAPSHOT.jar';
坚持原创技术分享,您的支持将鼓励我继续创作!