Hive写一个时间转换器的自定义函数(UDF)和创建hive自定义函数的两种方式

2024-05-11 12:32

本文主要是介绍Hive写一个时间转换器的自定义函数(UDF)和创建hive自定义函数的两种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前面一篇文章的日志表中,时间的格式的是这样的"31/Aug/2015:00:04:37 +0800";这样并不友好,为了好看点,我们自定义一个时间格式化的udf函数,hive应该也提供时间转换的函数。

自定义函数

代码
自定义函数还是继承UDF类

package com.madman.hive.function;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;/*** * UDF函数还是老样子....* * /*** A User-defined function (UDF) for the use with Hive.** New UDF classes need to inherit from this UDF class.** Required for all UDF classes: 1. Implement one or more methods named* "evaluate" which will be called by Hive. The following are some examples:* public int evaluate(); public int evaluate(int a); public double evaluate(int* a, double b); public String evaluate(String a, int b, String c);** "evaluate" should never be a void method. However it can return "null" if* needed.*/
public class HiveDateFunction extends UDF {public Text evaluate(Text time) {if (time == null) {return null;}if (StringUtils.isBlank(time.toString())) {return null;}String parser = time.toString().replaceAll("\"", "");SimpleDateFormat inputSimple = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);SimpleDateFormat outputSimple = new SimpleDateFormat("yyyyMMddHHmmss");String format = "";try {Date parse = inputSimple.parse(parser);format = outputSimple.format(parse);System.out.println(format);} catch (Exception e) {e.printStackTrace();return null;}return new Text(format);}public static void main(String[] args) {String text = "31/Aug/2015:00:04:37 +0800";System.out.println(new HiveDateFunction().evaluate(new Text(text)));System.exit(0);SimpleDateFormat inputSimple = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);SimpleDateFormat outputSimple = new SimpleDateFormat("yyyyMMddHHmmss");try {Date parse = inputSimple.parse(text);String format = outputSimple.format(parse);System.out.println(format);} catch (Exception e) {e.printStackTrace();}}
}

代码写好之后本地先测试下,是否可行,可行之后打成jar包上传到hive环境中去,然后将jar加入到hive中。
参考命令:

hive (default)> add  jar /opt/cdhmoduels/data/hiveDateFunction.jar;  

然后创建一个函数,参考命令:

create  temporary function hiveDateFunction as  'com.madman.hive.function.HiveDateFunction';
//这里需要制定类的路劲。

调用函数命令:

hive (default)> select hiveDateFunction(time_local) from bf_log limit 10;
结果:
Total MapReduce CPU Time Spent: 1 seconds 750 msec
OK
_c0
20150831000437
20150831000437
20150831000453
20150831000453
20150831000453
20150831000453
20150831000453
20150831000453
20150831000453
20150831000453
Time taken: 20.954 seconds, Fetched: 10 row(s)
hive自定义函数的两种方法
方式1

先上传jar包到hive的环境中,然后再定义函数指明类的具体路劲。

hive (default)> add  jar /opt/cdhmoduels/data/hiveDateFunction.jar;  
create  temporary function hiveDateFunction as  'com.madman.hive.function.HiveDateFunction';
测试SQL
hive (default)> select hiveDateFunction(time_local) from bf_log limit 10;
方式2

创建函数的时候直接指定类路劲和类所在jar的路劲,这里我是放在hdfs上面了,直接指定了hdfs的路劲。

create temporary function parseDate as 'com.madman.hive.function.HiveDateFunction' using jar 'hdfs://hadoop.madman.com:8020/jar/hiveDateFunction.jar';
测试SQL
hive (default)> select parseDate(time_local) from bf_log limit 10;

这篇关于Hive写一个时间转换器的自定义函数(UDF)和创建hive自定义函数的两种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979536

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库