我有这样的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);
}
答案 0 :(得分:1)
您的临时解决方案对于PIG是正确的。请记住,PIG是一种简单的数据流语言,它可以为您提供95%的开箱即用解决方案,剩下的5%可以通过UDF完成。要查看如何编写UDF的好例子,请查看DataFu by LinkedIn。