2017-10-17 1 views

답변

0

관계 A에 데이터를로드 한 가정

돼지 항아리 이클립스에서 프로젝트를 생성하고 코드

이제
package com; 

import java.io.IOException; 

import org.apache.pig.EvalFunc; 
import org.apache.pig.backend.executionengine.ExecException; 
import org.apache.pig.data.Tuple; 



public class Age extends EvalFunc<String>{ 

    @Override 
    public String exec(Tuple a) throws IOException { 
     // TODO Auto-generated method stub 
     if(a == null || a.size() == 0){ 
      return null; 
     } 
     try{ 
      Object object = a.get(0); 
      if(object == null){ 
       return null; 
      } 
      int i = (Integer) object; 
      if(i >= 10 && i <= 20){ 
       return "10-20"; 
      } 
      else if (i >= 21 && i <= 30){ 
       return "20-30"; 
      } 
      else 
       return ">30"; 
     } catch (ExecException e){ 
      throw new IOException(e); 
     } 
    } 

} 

수출 아래 시도 항아리로 프로젝트를 만들고 돼지 껍질에 등록하십시오.

REGISTER <path of your .jar file> 

패키지와 클래스로 정의하십시오.

DEFINE U com.Age(); 

a = LOAD '<input path>' using PigStorage(',') as (id:int,name:chararray,age:int); 

b = FOREACH a GENERATE id,name,age,U(age); 
1

제안하시기 바랍니다있다. 당신은 당신이 이클립스 돼지 UDF를 생성 할 수 있습니다

B = FOREACH A GENERATE A.Id,A.name,A.age,(A.age%5 == 0 ? A.age-5 : (A.age/5)*5) as lower_age,(A.age%5 == 0 ? A.age : ((A.age/5)*5) + 5) as upper_age; 
C = FOREACH B GENERATE B.Id,B.name,B.age,CONCAT(CONCAT((chararray)lower_age,'-'),(chararray)upper_age); 
DUMP C; 
+0

입력 해 주셔서 감사합니다. 상기 요구 사항에 대한 UDF 프로세스를 알려주십시오. –

관련 문제