2016-08-27 8 views
0

DATASET:
の効率を向上させるPIGスクリプト

01,X 
    02,Y 
    03,X 
    04,Y 
    05,X 
    06,X 
    07,Z 
    08,Z 
    09,X 
    10,Z 



目的:以下に示すように、私は(ID、カテゴリ)形式のデータセット(data.txtを)を有する


目的は、UDFを使用せずにIDの最大数を持つカテゴリを見つけることです。

一つのアプローチ:
私が複数回試み、これはPIG文の

A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray); 
A2 = DISTINCT A1; 
A3 = GROUP A2 BY Category; 
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number; 
A5 = GROUP A4 ALL; 
A6 = FOREACH A5 GENERATE MAX(A4.Number); 
A7 = FILTER A4 by Number == A6.$0; 
A8 = FOREACH A7 GENERATE Category; 
DUMP A8; 

要求設定followinsことで回避できことを結論付けている:これらのステートメントは、所望の結果を与えるが
を、私はその効率性を確信していません。 私はPIGを初めて勉強しているので、テーブルから最小値または最大値の対応する値を出力するようなタスクを実行できるinbuilt関数があるかどうかはわかりません。

私の要求は、これがより少ないステップ数で達成できるかどうかを知ることです。

多くのおかげで降順にカウントすることにより、ソート、グループ化をグループ化した後

答えて

1

と一番上のレコードを取得。

A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray); 
A2 = DISTINCT A1; 
A3 = GROUP A2 BY Category; 
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number; 
A5 = ORDER A4 BY Number DESC; 
A6 = LIMIT A5 1; 
DUMP A6.$0; 
+0

このスクリプトでは、最大値が複数ある場合、データセットに最大値が1つしかない場合、f9が機能します。正しい結果が得られません。 –

関連する問題