Apache-pig-top
提供:Dev Guides
Apache Pig-TOP()
Pig Latinの* TOP()関数は、バッグの上位 *N タプルを取得するために使用されます。 この関数には、入力として、関係、必要なタプルの数、および値を比較する列名を渡す必要があります。 この関数は、必要な列を含むバッグを返します。
構文
以下に、関数* TOP()*の構文を示します。
grunt> TOP(topN,column,relation)
例
HDFSディレクトリ /pig_data/ に employee_details.txt という名前のファイルがあり、次の内容があるとします。
*employee_details.txt*
001,Robin,22,newyork
002,BOB,23,Kolkata
003,Maya,23,Tokyo
004,Sara,25,London
005,David,23,Bhuwaneshwar
006,Maggy,22,Chennai
007,Robert,22,newyork
008,Syam,23,Kolkata
009,Mary,25,Tokyo
010,Saran,25,London
011,Stacy,25,Bhuwaneshwar
012,Kelly,22,Chennai
以下に示すように、このファイルをリレーション名 emp_data でPigにロードしました。
grunt> emp_data = LOAD 'hdfs://localhost:9000/pig_data/employee_details.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, city:chararray);
関係別に emp_data をグループ化し、関係 emp_group に保存します。
grunt> emp_group = Group emp_data BY age;
以下に示すように、ダンプ*演算子*を使用して、関係 emp_group を確認します。
grunt> Dump emp_group;
(22,{(12,Kelly,22,Chennai),(7,Robert,22,newyork),(6,Maggy,22,Chennai),(1,Robin, 22,newyork)})
(23,{(8,Syam,23,Kolkata),(5,David,23,Bhuwaneshwar),(3,Maya,23,Tokyo),(2,BOB,23, Kolkata)})
(25,{(11,Stacy,25,Bhuwaneshwar),(10,Saran,25,London),(9,Mary,25,Tokyo),(4,Sara, 25,London)})
これで、以下に示すように、各グループの上位2つのレコードを昇順(* idに基づく*)に配置できます。
grunt> data_top = FOREACH emp_group {
top = TOP(2, 0, emp_data);
GENERATE top;
}
この例では、IDが大きいグループの上位2タプルを取得しています。 id に基づいて上位2つのタプルを取得しているため、TOP()関数の2番目のパラメーターとして列名idのインデックスを渡します。
検証
以下に示すように、 Dump 演算子を使用して data_top 関係の内容を確認できます。
grunt> Dump data_top;
({(7,Robert,22,newyork),(12,Kelly,22,Chennai)})
({(5,David,23,Bhuwaneshwar),(8,Syam,23,Kolkata)})
({(10,Saran,25,London),(11,Stacy,25,Bhuwaneshwar)})