这可以使用 Joda 时间函数来实现。但是 Hive 不支持 Joda time Jars,您需要将 joda-time jar 显式添加到您的 hive lib 文件夹中。
函数 TD_WEEK_OF_CALENDAR 将星期日视为一周的第一天,星期六视为最后一天,而 joda-time 函数 getDayOfWeek() 将星期日视为一周的最后一天,将其编号设为 7,将星期日拉到同一周。
下面的代码将需要
public Text evaluate(Text input) {
if(null != input){
String date = input.toString();
StringTokenizer st = new StringTokenizer(date, "-");
int year = Integer.parseInt(st.nextToken());
int month = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
DateTime dateTime1 = new DateTime(1900, 1, 1, 0, 0, 0, 0);
DateTime dateTime2 = new DateTime(year, month, day, 0, 0, 0, 0);
int weeksDiff = dateTime2.getDayOfWeek() == 7 ? Weeks.weeksBetween(
dateTime1, dateTime2).getWeeks() + 1 : Weeks.weeksBetween(
dateTime1, dateTime2).getWeeks();
String weeks = weeksDiff + "";
return new Text(weeks);
} else {
return null;
}