如何在PigLatin的SUM中计算乘法

时间:2012-06-21 03:03:28

标签: hadoop apache-pig

我有这样的Pig DESCRIBE:

DESCRIBE B;
B: {group: chararray, A: {name: chararray,age: int,gpa: float}}

我想在Pig

中计算∑B.A.gpa2

但如果我写:

FOREACH B {
    out = SUM(A.gpa * A.gpa);
}

它抛弃了这样的例外:

[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1039: <file test.pig, line xx, column xx> (Name: Multiply Type: null Uid: null)incompatible types in Multiply Operator left hand side:bag :tuple(gpa:float)  right hand side:bag :tuple(gap:float)

我已经向Pig小组询问了解决方案,这是jira link

有人对我的问题有其他建议吗?

我的临时解决方案是

FOREACH B {
    tmp_out = FOREACH A GENERATE gpa*gap;
    out = SUM(tmp_out);
}

1 个答案:

答案 0 :(得分:1)

您的临时解决方案对于PIG是正确的。请记住,PIG是一种简单的数据流语言,它可以为您提供95%的开箱即用解决方案,剩下的5%可以通过UDF完成。要查看如何编写UDF的好例子,请查看DataFu by LinkedIn