猪0.12嵌套Foreach不能正常工作

时间:2015-03-10 19:15:34

标签: filter apache-pig limit

我已经尝试了一段时间,并且似乎无法解决这个问题,而且要解决我的问题有点困难。

我有一个以前按user_idlisting_id分组的关系,在生成并展平输出后我得到了这个:

    test: {user_id: bytearray,listing_id: bytearray,hotness: long}

因此,我的下一步是按用户分组,按热门排序,并将每位用户的商家信息数量限制为20个。

grped = GROUP test BY user_id;
grped_sorted = FOREACH grped {
    sorted = order test BY hotness desc;
    top1   = limit sorted 20;
    listings = FOREACH top1 GENERATE FLATTEN((bytearray)top1.listing_id) as listing_id;
         GENERATE group as user_id, FLATTEN(listings.($0)) as listing_ids;
   };

但这似乎让我错误,以前从列表细节中删除的信息:

Scalar has more than one row in the output.

拜托,我需要帮助。 有没有办法做到这一点?我可以使用DataFu中的一些UDF吗? 创建我自己的UDF是不可能的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为如果代码看起来像

那么它应该可行
grped = GROUP test BY user_id;
grped_sorted = FOREACH grped {
    sorted = order test BY hotness desc;
    top1   = limit sorted 20;
    GENERATE group as user_id, top1.listing_id as listing_ids;
};

这的输出类似于

grped_sorted: {user_id: bytearray,listing_ids: {(listing_id: bytearray)}}

不确定这是否是你想要的。