如何通过元组的给定字段将元组中的多个字段相乘

时间:2012-04-24 01:52:33

标签: apache-pig

对于每一行数据,我想将字段1到N乘以字段0.数据可能每行有数百个字段(或者就此而言可变数量的字段),因此写出每对字段不是可行。有没有办法指定一系列字段,类似于以下(不正确的)代码段?

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

1 个答案:

答案 0 :(得分:0)

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中调用它。