Hive之自定义UDF函数的编写,打包,与创建
本文的内容由三部分组成,
(1)关于本函数实现的功能的介绍。
(2)java代码的编写部分.
(3)第三部分是hive的自定义UDF函数的打包,创建,和测试.
一 这个函数的功能在统计用户活跃度的场景比较适用,主要实现的功能如下:
(1)根据输入的时间信息,返回当天的起始时间。
(2)根据输入的时间信息,返回本周的起始时间 。
(3)根据输入的时间信息,返回本月的起始时间。
(4)根据输入的时间和时间格式化信息,返回按格式化要求显示的时间。
二 关于本文中的一些常用类和方法的介绍:
1 SimleDateFormat类下的format( )方法。
//format( ):用于创建格式化的字符串以及连接多个字符串对象。
//format(String format, Object args): 新字符串使用本地语言环境,指定字符串格式和参数生成格式化的新字符串。
//format(Locale locale, String format, Object args):使用指定的语言环境,指定 字符串格式和参数生成格式化的字符串。
2 Calendar类下的常用方法。
//getInstance()使用默认时区和语言环境获得一个日历。
//setTime(Date date)使用给定的 Date 设置此 Calendar 的时间。
//add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
//Calendar.DAY_OF_WEEK:表示一周中的第几天,会因为选用的星期的表达格式的不同而受影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
下面是java代码的编写:
package UDF;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
//代码主体
/*获取每天的零时刻*/
public static Date getDayBeginTime(Date t){
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd/ 00:00:00");
return formatter.parse(formatter.format(t));
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/*获取每天零时刻,并指定时间偏移量的重载*/
public static Date getDayBeginTime(Date t,int offset){
try{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd 00:00:00");
Date date = formatter.parse(formatter.format(t));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// Calendar.DAY_OF_MONTH返回当月的第几天,如当月的第一天为1号。
calendar.add(Calendar.DAY_OF_MONTH,offset);
return calendar.getTime();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/*获取每周的第一天*/
public static Date getWeekBeginTime(Date t){
try{
//掉用getDayBeginTime,进行时间零时格式化。
Date date = getDayBeginTime(t);
//getInstance()使用默认时区和语言环境获得一个日历。
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int n = Calendar.DAY_OF_WEEK;