大量のウェブログデータがあります。セッション化する必要があります。また、セッションごとに前のドメインと次のドメインを生成する必要があります。AWSEMRのインタラクティブなジョブフローを介してテストしています。
現在、次のコードを使用してデータをセッション化することができます:http: //goo.gl/L52Wf。UDFのコンパイルと使用に慣れるのに少し手間がかかりましたが、私はそれまでにそれを達成しました。
入力ファイルのヘッダー行と最初の行(タブ区切り)は次のとおりです。
ID Date Rule code Project UID respondent_uid Type Tab ID URL domain URL path Duration Exit cause Details
11111111 2012-09-25T11:21:20.000Z 20120914_START_USTEST 20120914_TESTSITE_US_TR test6_EN_9 PAGE_VIEWED FF1348568479042 http://www.google.fr 11 OTHER
これはリレーションからのタプルSESSIONS
です(リレーションを取得する手順を以下に示します)。
(2012-09-27 04:42:20.000,11999603,20120914_URL_ALL,20120914_TESTSITE_US_TR,2082810875_US_9,PAGE_VIEWED,CH17,http://hotmail.com,_news/2012/09/26/14113684,28,WINDOW_DEACTIVATED,,3019222a-5c4d-4767-a82e-2b4df5d9db6d)
これは、テストデータをセッション化するために現在実行しているものとほぼ同じです。
register s3://TestBucket/Sessionize.jar
define Sessionize datafu.pig.sessions.Sessionize('30m');
A = load 's3://TestBucket/party2.gz' USING PigStorage() as (id: chararray, data_date: chararray, rule_code: chararray, project_uid: chararray, respondent_uid: chararray, type: chararray, tab_id: chararray, url_domain: chararray, url_path: chararray, duration: chararray, exit_cause: chararray, details: chararray);
B = foreach A generate $1, $0, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11;
C = filter B by id neq 'ID';
VIEWS = group C by (respondent_uid, url_domain);
SESSIONS = foreach VIEWS { VISITS = order C by data_date; generate FLATTEN(Sessionize(VISITS)) as (data_date: chararray, id: chararray, rule_code: chararray, project_uid: chararray, respondent_uid: chararray, type: chararray, tab_id: chararray, url_domain: chararray, url_path: chararray, duration: chararray, exit_cause: chararray, details: chararray, session_id); }
(Bでの手順は、日付を最初の位置に移動することです。Cでの手順は、ファイルヘッダーをフィルターで除外することです)
ここからこれを進める正しい方向まで迷っています。
豚のスクリプトとのSESSIONS
関係を繰り返して、次のドメインと前のドメインを取得できますか?カスタムUDFを作成し、それに関係をforeach
渡す方がよいでしょうか?SESSIONS
(私自身のUDFを書くことは冒険になるでしょう!..)
アドバイスをいただければ幸いです。誰かがやるべきでないことを勧めることができたとしても、同じように役立つかもしれないので、私はジャンクアプローチを研究する時間を無駄にしません。私はHadoopとpigスクリプトにまったく慣れていないので、これは間違いなく私の得意分野の1つではありません(まだ..)。