2016-08-11 13 views
0

私は、OT、AT、HPの3つの値を持つChararrayとして定義された列(Productという名前)を持っています。私は、新しい列を作成して、整数にこの値を変換したい:そのためにApache PIG - 別の値に基づいて新しい列を作成します。

  1. OT = 1
  2. AT = 2
  3. HP = 3

私はのforeachなステートメントを作成:

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; 

もし私が文字列を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はあなたの豚のスクリプトで実行する必要がありますが、NULLをしたい場合は、その後

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; 

二つの修正。 =の代わりに第一はちょうどuは値のnullが、私はまだエラーを取得「 int

+0

こんにちははAnkurに他chararrayすべて置き換える値に変換したい場合== 第二置く:(私は自分のコードを更新しました – SaCvP

関連する問題