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)})