更多精彩原创内容请关注:JavaInterview,欢迎 star,支持鼓励以下作者,万分感谢。

Hive 函数

相信大家对 Hive 都不陌生,那么大家肯定用过 Hive 里面各种各样的函数。可能大家都会使用这些函数,但是没有自己动手去写过 Hive 里面的函数。下面主要来介绍一下 Hive 里面的各种函数。

依赖

开发 Hive UDF 之前,我们需要引入一个 jar,这个 jar 就是 hive-exec,里面定义了各种我们自定义的 UDF 函数的类型:UDF、GenericUDF、GenericUDTF 等。


<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.1</version>
</dependency>

UDF(User-Defined-Function)

UDF:用户自定义函数,也是实现起来最简单的一种函数。支持的就是一进一出类型的函数。

如何实现?

  • 继承 UDF 类。

  • 重写 evaluate 方法。

  • 将该 java 文件打包成 jar。

  • 在 beeline(hive 的一种终端)中输入如下命令:

    • 0: jdbc:hive2://localhost:10000> add jar /data/tommyyang/HiveUDF.jar;

    • 0: jdbc:hive2://localhost:10000> create temporary function ip2loc as 'cn.tommyyang.IPToLocation';

    • 0: jdbc:hive2://localhost:10000> select ip2loc("118.28.1.1");

    • 0: jdbc:hive2://localhost:10000> drop temporary function ip2loc;

具体代码实现:


@Description(
name = "ip2loc",
value = "_FUNC_(str) - covert ip to location",
extended = "Example:\n" +
" > SELECT ip2loc(ip) FROM ips;\n" +
" [中国,上海]"
)
public class IPToLocation extends UDF { private static final InputStream stream = IPToLocation.class.getClassLoader().getResourceAsStream("ipipfree.ipdb");
private static City db = null; static {
try {
db = new City(stream);
} catch (IOException e) {
e.printStackTrace();
}
} // 具体实现逻辑
public ArrayList<String> evaluate(Text s) throws IOException, IPFormatException {
ArrayList<String> allTexts = new ArrayList<>();
if (s != null) {
CityInfo info = db.findInfo(s.toString(), "CN");
allTexts.add(info.getCountryName());
allTexts.add(info.getRegionName());
allTexts.add(info.getCityName());
}
return allTexts;
} }

@Description 为该 UDF 的描述,你可以通过命令 desc function ip2loc查看具体的描述;如下图:

最新文章

  1. 《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  2. C# 之httpwatch 缩减HttpWatch成可以进行二次开发的代码
  3. C语言中常见的排序方法
  4. WampServer Version 2.5 bug修改
  5. Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 直径
  6. 监听cell 滑动到 摸个分区
  7. Git CMD - show: Show various types of objects
  8. Ajax-数据格式-html
  9. 误解了Windows Server AppFabric
  10. ECMall关于数据查询缓存的问题
  11. linux 图形界面切换
  12. 如何分割(split)string字符串
  13. json时间格式的互换
  14. [SCOI2007]蜥蜴
  15. 时间复杂度O(n),空间复杂度O(1)解斐波那契数列
  16. [Poi2014]FarmCraft 树状dp
  17. AVL树的理解及自写AVL树
  18. 动态设置所有string字段不分词
  19. leetcode 587. Erect the Fence 凸包的计算
  20. bzoj [POI2005]Kos-Dicing 二分+网络流

热门文章

  1. 错误消息对话框QErrorMessage
  2. 安装vue-cli脚手架项目
  3. vue制作分页
  4. android 8.0 适配(总结)
  5. PHP入门培训教程 PHP变量的使用
  6. asp.net 怎么上传文件夹啊,不传压缩包
  7. D - Cheerleaders(第三周)
  8. CSS选择器(CCS第三版)
  9. 关于跨域踩的坑,浏览器 status code为200,但实际上是跨域了
  10. React-Native 之 GD (五)属性声明和属性确认 及 占位图