2016-08-11 12 views
0

Chararray로 정의 된 열 (제품 이름)은 OT, AT 및 HP의 세 가지 값을가집니다.Apache PIG - 다른 값을 기준으로 새 열을 만듭니다.

  1. OT = 1
  2. AT = 2
  3. HP I는 foreach는 한 Statment 만드는 것이 들어 = 3

:

를 I 새로운 컬럼을 생성하고 정수로,이 값을 변환 할
REGISTER '/usr/lib/pig/piggybank.jar'; 

File = load '/user/cloudera/file.csv' 
    USING org.apache.pig.piggybank.storage.CSVExcelStorage(',') 
     as (ID:Long, 
      Chain:Int, 
      Dept:Int, 
      Product_Measure:Chararray, 
      Price:Double); 


Values = FOREACH File Generate 
          ID, 
              Chain, 
              Dept, 
              ((Chararray)Product_Measure=='OT'?'1':(Chararray)Product_Measure=='AT'?'2':(Chararray)Product_Measure=='HP'?'3':'0') as Product_Measure, 
              (Price<0.1?0:Price) as Price; 

Filter_Values = FILTER Values BY Price > 0; 

DUMP Filter_Values; 

제 3 부 라인을 제거하면 잘 작동하므로 char 형을 int로 변환하려고 할 때 문제가 있다고 생각합니다.

아무도 도와 줄 수 있습니까?

감사합니다!

답변

0
Values = FOREACH Source Generate 
         ID, 
         Date, 
         ((Chararray)Product == 'OT' ? (int)1 : (Chararray)Product_Measure == 'AT' ? (int)2 : (Chararray)Product_Measure == 'HP' ? (int)3 : 0) as Product_Value, 
        (Quantity<0?0:Quantity) as Quantity, 
        (Price<0.1?0:Price) as Price; 

하거나 u는 당신의 돼지 스크립트에서 할 필요가 다음

Values = FOREACH Source Generate 
          ID, 
          Date, 
          ((Chararray)Product == 'OT' ? '1' : (Chararray)Product_Measure == 'AT' ? '2' : (Chararray)Product_Measure == 'HP' ? '3' : 'NULL') as Product_Value, 
         (Quantity<0?0:Quantity) as Quantity, 
         (Price<0.1?0:Price) as Price; 

두 수정을 NULL를 원하는 경우. = 대신 1 단지 u는 값 null 내가 여전히 오류가 ' int

+0

안녕 ankur에 다른 chararray 모든 대체 값으로 변환하려면 == 2 차 넣어 :(난 내 코드를 업데이 트했습니다 – SaCvP