Pig反转了分组元组的顺序

时间:2014-07-31 20:07:54

标签: apache-pig

我正在运行一个猪脚本,它会压扁一个包,对其进行过滤,然后将它组合在一起,以便我可以将它传递给UDF。问题是,当我需要ASC顺序时,最后一个日期[在最后一个值之前]是DESC顺序

EX:

((RRRRRRR#,T2,19840101011),
{
  (RRRRRRR#,T2,19840101011,3.0,4.25,01-01-2014,31-03-2014,01-03-2014,20140101197),
  (RRRRRRR#,T2,19840101011,3.0,3.75,01-01-2014,31-03-2014,01-02-2014,20140101197),
  (RRRRRRR#,T2,19840101011,3.0,3.75,01-01-2014,31-03-2014,01-01-2014,20140101197)
})                                                         //^ REVERSED ORDER

我需要什么:

((RRRRRRR#,T2,19840101011),
{
  (RRRRRRR#,T2,19840101011,3.0,3.75,01-01-2014,31-03-2014,01-01-2014,20140101197),
  (RRRRRRR#,T2,19840101011,3.0,3.75,01-01-2014,31-03-2014,01-02-2014,20140101197),
  (RRRRRRR#,T2,19840101011,3.0,4.25,01-01-2014,31-03-2014,01-03-2014,20140101197)
})                                                         //^ NEED THIS ORDER

有没有办法在袋子里订购元组?如果没有,我怎么能阻止GROUP命令这样排序?

1 个答案:

答案 0 :(得分:1)

根据定义,袋子是无序的。因此,您不能保证您所做的任何转换都会保留顺序。但是,如果在特定步骤中您需要保证订购,则可以在嵌套ORDER BY内使用FOREACH

b = FOREACH a {
        field2_ord = ORDER field2 BY date;
    GENERATE
        field1,
        field2_ord;
    };