我已经尝试了一段时间,并且似乎无法解决这个问题,而且要解决我的问题有点困难。
我有一个以前按user_id
和listing_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是不可能的。
提前致谢。
答案 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)}}
不确定这是否是你想要的。