1
對於每一行數據,我希望將字段1到N乘以字段0.數據可能每行有數百個字段(或變量這個問題的字段數量),所以寫出每一對是不可行的。有沒有一種方法來指定一系列的字段,有點像以下(不正確)的片段?如何將元組中的幾個字段乘以元組的某個字段
A = LOAD 'foo.csv' USING PigStorage(',');
B = FOREACH A GENERATE $0*($1,..);
對於每一行數據,我希望將字段1到N乘以字段0.數據可能每行有數百個字段(或變量這個問題的字段數量),所以寫出每一對是不可行的。有沒有一種方法來指定一系列的字段,有點像以下(不正確)的片段?如何將元組中的幾個字段乘以元組的某個字段
A = LOAD 'foo.csv' USING PigStorage(',');
B = FOREACH A GENERATE $0*($1,..);
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調用它。