在Hadoop上的Pig中引用包中的元素

时间:2016-04-16 22:24:28

标签: hadoop apache-pig

我有一个名为student的别名,数据结构是这样的(命令describe的结果),

studentIDInt:int,courses:bag{(courseId:int,testID:int,score:int)}

然后我试图按分数过滤学生,但遇到了这样的猪解析错误,如果有人有任何好的想法,那就太棒了。感谢。

对错误消息中报告的其他元组感到困惑。

student = filter student by courses.score > 3;

incompatible types in GreaterThan Operator left hand side:bag :tuple(score:int)  right hand score:int

的问候, 林

1 个答案:

答案 0 :(得分:1)

你不能直接这样做。可能的解决方案是首先展平,过滤,然后重新组合

flat_student = foreach student generate studentIDInt, flatten(courses);
filtered_student = filter flat_student by score > 3;
final_student = group filtered_student by studentIDInt;   

另一种方法是编写自定义FilterFunc,因此由您自己选择。