Apache-pig-isempty

提供:Dev Guides
移動先:案内検索

Apache Pig-IsEmpty()

Pig Latinの* IsEmpty()*関数は、バッグまたはマップが空かどうかを確認するために使用されます。

構文

以下に、* IsEmpty()*関数の構文を示します。

grunt> IsEmpty(expression)

以下に示すように、HDFSディレクトリ /pig_data/emp_sales.txtemp_bonus.txt の2つのファイルがあると仮定します。 emp_sales.txt には営業部門の従業員の詳細が含まれ、 emp_bonus.txt にはボーナスを受け取った従業員の詳細が含まれます。

*emp_sales.txt*
1,Robin,22,25000,sales
2,BOB,23,30000,sales
3,Maya,23,25000,sales
4,Sara,25,40000,sales
5,David,23,45000,sales
6,Maggy,22,35000,sales
*emp_bonus.txt*
1,Robin,22,25000,sales
2,Jaya,23,20000,admin
3,Maya,23,25000,sales
4,Alia,25,50000,admin
5,David,23,45000,sales
6,Omar,30,30000,admin

そして、以下に示すように、それぞれ emp_sales および emp_bonus の関係名でこれらのファイルをPigにロードしました。

grunt> emp_sales = LOAD 'hdfs://localhost:9000/pig_data/emp_sales.txt' USING PigStorage(',')
   as (sno:int, name:chararray, age:int, salary:int, dept:chararray);

grunt> emp_bonus = LOAD 'hdfs://localhost:9000/pig_data/emp_bonus.txt' USING PigStorage(',')
   as (sno:int, name:chararray, age:int, salary:int, dept:chararray);

次に、以下に示すように cogroup 演算子を使用して、キー age を持つリレーション emp_sales および emp_bonus のレコード/タプルをグループ化します。

grunt> cogroup_data = COGROUP emp_sales by age, emp_bonus by age;

以下に示すように、 DUMP 演算子を使用してリレーション cogroup_data を確認します。

grunt> Dump cogroup_data;

(22,{(6,Maggy,22,35000,sales),(1,Robin,22,25000,sales)}, {(1,Robin,22,25000,sales)})
(23,{(5,David,23,45000,sales),(3,Maya,23,25000,sales),(2,BOB,23,30000,sales)},
   {(5,David,23,45000,sales),(3,Maya,23,25000,sales),(2,Jaya,23,20000,admin)})
(25,{(4,Sara,25,40000,sales)},{(4,Alia,25,50000,admin)})
(30,{},{(6,Omar,30,30000,admin)})

COGROUP演算子は、年齢に応じて各リレーションのタプルをグループ化します。 各グループは特定の年齢の値を表します。

たとえば、結果の最初のタプルを検討する場合、22歳でグループ化されます。 また、2つのバッグが含まれます。最初のバッグには、22歳の最初の関係(この場合は、student_details)のすべてのタプルが含まれ、2番目のバッグには、22歳の2番目の関係(この場合、employee_details)からのすべてのタプルが含まれます 関係に年齢値が22のタプルがない場合、空のバッグが返されます。

空のバッグを持つグループの取得

  • IsEmpty()関数を使用して、グループ内の *emp_sales リレーションからそのような空のバッグをリストします。
grunt> isempty_data = filter cogroup_data by IsEmpty(emp_sales);

検証

以下に示すように、DUMP演算子を使用してリレーション isempty_data を確認します。 emp_sales リレーションは、リレーション emp_bonus にないタプルを保持します。

grunt> Dump isempty_data;

(30,{},{(6,Omar,30,30000,admin)})