【发布时间】:2016-02-25 20:51:30
【问题描述】:
这是我的代码,我做了两组所有操作,我的代码工作正常。我的目的是生成所有学生的唯一用户计数及其总分,学生位于 CA 唯一用户计数中。想知道是否有好的建议让我的代码变得简单,只使用一个组操作,或者有什么建设性的想法让代码简单,例如只使用一个 FOREACH 操作?谢谢。
student_all = group student all;
student_all_summary = FOREACH student_all GENERATE COUNT_STAR(student) as uu_count, SUM(student.mathScore) as count1,SUM(student.verbScore) as count2;
student_CA = filter student by LID==1;
student_CA_all = group student_CA all;
student_CA_all_summary = FOREACH student_CA_all GENERATE COUNT_STAR(student_CA);
示例输入(学生 ID、位置 ID、mathScore、verbScore),
1 1 10 20
2 1 20 30
3 1 30 40
4 2 30 50
5 2 30 50
6 3 30 50
示例输出(唯一用户、CA 中的唯一用户、所有学生的 mathScore 总和、所有学生的动词分数总和),
7 3 150 240
提前致谢, 林
【问题讨论】:
-
我不太了解猪,所以不能给你一个确切的答案,但从概念上讲,我认为你希望
GROUP student BY (student, LID),将你的数据聚合到更易于管理的大小,但仍然保留然后你需要的粒度,那么你的“FOREACH”聚合会更快 -
@maxymoo,您的意思是仅按位置 (LID) 分组?还是按位置 + 学生证?
-
将两者分组,然后您将拥有一个大小为#locations * #students 的表格。然后可以选择按位置过滤或总结整个事情以获得您的两种类型的聚合
-
@maxymoo,谢谢,但学生证是唯一的,按学生证+位置ID分组的目的是什么?顺便说一句,如果你能把你的代码写下来,那就清楚了。
标签: hadoop apache-pig