我有样本数据
user_id, date, accessed url, session time
数据是指用户的前3个兴趣,具体取决于会话时间。
使用代码获取数据:
top3 = FOREACH DataSet{
sorted = ORDER DataSet BY sessiontime DESC;
lim = LIMIT sorted 3;
GENERATE flatten(group), flatten(lim);
};
输出:
(1,20,url1,2484)
(1,20,url2,1863)
(1,20,url3,1242)
(2,22,url4,484)
(2,22,url5,63)
(2,22,url6,42)
(3,25,url7,500)
(3,25,url8,350)
(3,25,url9,242)
但我希望我的输出是这样的:
(1,20,url1,url2,url3)
(2,22,url4,url5,url6)
(3,25,url7,url8,url9)
请帮忙。
答案 0 :(得分:0)
你很亲密。问题是当你真的想要将它们全部保存在一条记录中时,你FLATTEN
了一袋URL。所以这样做:
top3 = FOREACH DataSet{
sorted = ORDER DataSet BY sessiontime DESC;
lim = LIMIT sorted 3;
GENERATE flatten(group), lim.url;
};
根据您获得的输出,您现在将获得
(1,20,{(url1),(url2),(url3)})
(2,22,{(url4),(url5),(url6)})
(3,25,{(url7),(url8),(url9)})
请注意,网址包含在包中。如果您想将它们作为三个顶级字段,则需要使用UDF将包转换为元组,然后FLATTEN
。