-1

我有样本数据

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)

请帮忙。

4

1 回答 1

0

你很亲密。问题是,FLATTEN当您真的想将 URL 全部保存在一个记录中时,您会遇到一堆 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)})

请注意,URL 包含在一个包中。如果要将它们作为三个顶级字段,则需要使用 UDF 将包转换为元组,然后再FLATTEN进行。

于 2013-10-17T17:02:38.360 回答