1

我有一个像这样的猪 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 group 寻求解决方案,这是 jira链接

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

我的临时解决方案是

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

1 回答 1

1

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

于 2012-07-03T21:31:14.773 回答