hiveudf 함수 지정 날짜 가져오기

3402 단어
먼저 사고를 기록합니다: 기능 논리는 eclipse에서 실행됩니다.hive에 업로드하면 이 함수를 실행할 수 없습니다
코드는 다음과 같습니다.
package hive.udf;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.hive.ql.exec.UDF;

public class date_return extends UDF {
 public String exvaluate(String strDate) throws ParseException {
//   String strDate = "2017/04/23 16:45:12";  //    
  String dateM = strDate.toString();
   boolean status = dateM.contains("-"); 
   if (status){
          SimpleDateFormat lsdStrFormat = new SimpleDateFormat("yyyy-MM-dd");//   SimpleDateFormat  
          Date strD = lsdStrFormat.parse(dateM); // string   data  
          Date lastDayOfMonth = getLastDayOfMonth(strD);//  getLastDayOfMonth             
          return (lsdStrFormat.format(lastDayOfMonth));
   }
   else{
          SimpleDateFormat lsdStrFormat = new SimpleDateFormat("yyyy/MM/dd");
          Date strD = lsdStrFormat.parse(dateM); 
          Date lastDayOfMonth = getLastDayOfMonth(strD);
          System.out.println(lsdStrFormat.format(lastDayOfMonth));
   }
  return null;

 }
 
public static Date getLastDayOfMonth(final Date date) {
        final Calendar cal = Calendar.getInstance();
//        System.out.println("date :"+date);
        cal.setTime(date);//setTime      
//        System.out.println("     :"+cal.getTime());
        final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);//        
//        System.out.println("last:"+last);
        cal.set(Calendar.DAY_OF_MONTH, last);//
//        System.out.println("     :"+cal.getTime());
        return cal.getTime();
 }

 public static void main(String[] args) throws ParseException {
  System.out.println(new date_return().exvaluate("2018-02-07"));
 }
 }

나중에 논리를 다시 써서 됐어요.
코드는 다음과 같습니다.
package hive.udf;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;

public class date_return extends UDF {		
	  public String evaluate(String thisdate) {  
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
			if (thisdate.length()==8)
				format = new SimpleDateFormat("yyyyMMdd");
		      //        :
	        Calendar c = Calendar.getInstance();    
	        Date   thisb=null;
	  	  try {
	  		    thisb=format.parse(thisdate);
	  		  
	  		  } catch (ParseException e) {
	  		   e.printStackTrace();
	  		  }
	  	  c.setTime(thisb);
	        c.add(Calendar.MONTH, 0);
	 //       c.set(Calendar.DAY_OF_MONTH,1);//   1 ,            
	  //      String first = format.format(c.getTime());
	  //      System.out.println("===============first:"+first);
	        
	        //         
	     //   Calendar ca = Calendar.getInstance();    
	        c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));  
	        String last = format.format(c.getTime());
	        return last;
	  }  


	}


다 쓴 후에 이 파일 export를jar 패키지로 쳐서 업로드합니다
create function return_lastday as 'hive.udf.date_return' using jar 'hdfs:///udf/lastday.jar';
hue의hive와impala에서 이 함수를 사용하려면 Hiveserver와impaladaemon을 다시 시작해야 합니다
 
 

좋은 웹페이지 즐겨찾기