-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 を 1 つのレコードに保持したい場合に、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 はバッグの中に含まれていることに注意してください。それらを 3 つの最上位フィールドとして使用する場合は、UDF を使用してバッグをタプルに変換する必要がありますFLATTEN

于 2013-10-17T17:02:38.360 に答える