0

CDH4 クラスターで pig-0.11.0-cdh4.3.0 を使用しており、一部の Web ログの重複を排除する必要があります。ソリューションのアイデア (SQL で表現) は次のようなものです。

SELECT
     T1.browser,
     T1.click_type,
     T1.referrer,
     T1.datetime,
     T2.datetime
FROM
     My_Table T1
INNER JOIN My_Table T2 ON
     T2.browser = T1.browser AND
     T2.click_type = T1.click_type AND
     T2.referrrer = T1.referrer AND
     T2.datetime > T1.datetime AND
     T2.datetime <= DATEADD(mi, 1, T1.datetime)

ここから上記を取得しましたSQL find duplicate records occur within 1 minutes of each other . Pig で同様のソリューションを実装できることを望んでいますが、上記の結合で必要な式 (フィールドのみ) を介した JOIN を明らかに Pig がサポートしていないことがわかりました。Pig を使用して 1 分近くのイベントの重複を排除する方法を知っていますか? ありがとう!

4

4 に答える 4

0

私の頭の上から、このようなものはうまくいくかもしれませんが、テストが必要です:

view = FOREACH input GENERATE browser, click_type, referrer, datetime, GetYear(datetime) as year, GetMonth(datetime) as month, GetDay(datetime) as day, GetHour(datetime) as hour, GetMinute(datetime) as minute;
grp = GROUP view BY (browser, click_type, referrer, year, month, day, hour, minute);
uniq = FOREACH grp {
    top = LIMIT view 1;
    GENERATE FLATTEN(view.(browser, click_type, referrer, datetime))
}

ここで、1 つのイベントが 12:03:45 にあり、別のイベントが 12:03:59 にある場合、これらは同じグループに属し、12:04:45 と 12:05:00 は異なるグループに属します。

正確な 60 秒の差を取得するには、グループ化されたソートされたバッグ (browser、click_type、referrer) を反復処理し、不要な行を削除する UDF を作成する必要があります。

于 2013-07-16T14:44:42.527 に答える