Apache pig 关于元组包中最大值的清管器过滤器命令

Apache pig 关于元组包中最大值的清管器过滤器命令,apache-pig,Apache Pig,对于以下输入: (id:INT, val:INT, yr:INT); (1 100 2014) (1 100 2015) (1 160 2016) (2 95 2014) (2 140 2015) (2 110 2016) (3 130 2016) (4 140 2015) (4 160 2016) (5 60 2014) 对于每一年,我需要找到最高的val。我还需要在输出中包含相应的id。

对于以下输入:

(id:INT, val:INT, yr:INT);
(1   100    2014)
(1   100    2015)
(1   160    2016)
(2   95     2014)
(2   140    2015)
(2   110    2016)
(3   130    2016)
(4   140    2015)
(4   160    2016)
(5   60     2014)
对于每一年,我需要找到最高的val。我还需要在输出中包含相应的id。输出还应按年份按描述顺序排序

输出应为:

yr   id val 
(2016 1  160)
(2016 2  160)
(2015 1  140)
(2015 3  140)
(2014 2  100)
猪拉丁文:

LOAD data....
grpyr = GROUP data BY year;
maxperyr = FOREACH grpyr GENERATE group AS maxyr, MAX(data.val) AS maxval;
max = FILTER grpyr BY (data.val == maxperyr.maxval) AND (data.yr == maxperyr.maxyr);
错误出现在FILTER语句中:Equal运算符左侧的不兼容类型:bag:tuple(amnt:int)右侧的:int 我还尝试在数据表上过滤,而不是在grpyr上过滤,但这也不起作用

有更好的方法吗


提前谢谢

对于这种情况,Filter不是正确的命令。通过JOIN可以“Filter”并获得所需的id以及每年的最大值

maxperyr = FOREACH grpyr GENERATE group AS maxyr, MAX(data.val) AS maxval;
max_id_yr = JOIN maxperyr BY (maxyr,maxval),data BY (yr,val);
final = FOREACH max_id_yr GENERATE maxperyr::maxyr,data::id,maxperyr::maxval; 

你的产出没有反映出你对你的问题的预期产出。你说你想要每年的最大产出和id,那么2016年你怎么会有id 2和160?2015年也一样,不是应该是2和4吗?