hive编写udf实践记录

官方教程:https://cwiki.apache.org/confluence/display/Hive/HivePlugins
简单使用查看上面官方的文档即可。这里记录一下我使用的实践和一点注意事项。

一 编写udf

这里的需求是写一个udf,用于将经纬度转换成geohash。参数有 经纬度和geohash的精度。

gradle配置

gradle 部分配置如下:

dependencies {
    compile group: 'ch.hsr', name: 'geohash', version: '1.3.0'
    compileOnly group: 'org.apache.hive', name: 'hive-exec', version: '2.3.6'
}

task fatJar(type: Jar) {
    //baseName = project.name
    baseName = 'hiveFunction'
    project.fileTree("$buildDir/fatjar/libs").forEach { jarFile ->
        from zipTree(jarFile )
    }
    with jar
    destinationDir = file("$buildDir/fatjar")
}

task copyToLib(type: Copy) {
    into "$buildDir/fatjar/libs"
    from configurations.runtime
}

UDF类

GeoHashUDF.java 代码如下:
这里需要注意的就是注释的写法,以及异常的处理。
因为在hive执行的过程中,如果udf抛一个异常出来,有可能会导致整个hive sql执行的失败。所以,对于业务异常,应该避免向外抛出。
以本geohash的udf为例,如果给定的经纬度不合法,则可返回用0填充的默认字符串。

import ch.hsr.geohash.GeoHash;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.U
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值