2012-04-24 73 views
1

對於每一行數據,我希望將字段1到N乘以字段0.數據可能每行有數百個字段(或變量這個問題的字段數量),所以寫出每一對是不可行的。有沒有一種方法來指定一系列的字段,有點像以下(不正確)的片段?如何將元組中的幾個字段乘以元組的某個字段

A = LOAD 'foo.csv' USING PigStorage(','); 
B = FOREACH A GENERATE $0*($1,..); 

回答

0

A UDF可能在這裏派上用場。

實施EXEC(數組輸入)和遍歷元組的各個領域如下(未測試):

public class MultiplyField extends EvalFunc<Long> { 
    public Long exec(Tuple input) throws IOException { 
     if (input == null || input.size() == 0) { 
      return null; 
     } 
     try { 
     Long retVal = 1; 
     for (int i = 0; i < input.size(); i++) { 
      Long j = (Long)input.get(i); 
      retVal *= j; 
     } 
     return retVal; 
     } catch(Exception e) { 
      throw WrappedIOException.wrap("Caught exception processing input row ", e); 
     } 
    } 
} 

然後註冊你的UDF,並從您的FOREACH調用它。

相關問題