Apache-pig-subtract

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

Apache Pig-SUBTRACT()

Pig Latinの* SUBTRACT()*関数は、2つのバッグを減算するために使用されます。 入力として2つのバッグを取り、2番目のバッグにない最初のバッグのタプルを含むバッグを返します。

構文

以下に示すのは、* SUBTRACT()*関数の構文です。

grunt> SUBTRACT(expression, 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演算子を使用して、キー sno を持つリレーション emp_sales および emp_bonus のレコード/タプルをグループ化します。

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

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

grunt> Dump cogroup_data;

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

1つの関係を他の関係から減算する

ここで、 emp_sales 関係から emp_bonus 関係のタプルを減算します。 結果のリレーションは、 emp_bonus にない emp_sales のタプルを保持します。

grunt> sub_data = FOREACH cogroup_data GENERATE SUBTRACT(emp_sales, emp_bonus);

検証

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

grunt> Dump sub_data;

({})
({(2,BOB,23,30000,sales)})
({})
({(4,Sara,25,40000,sales)})
({})
({(6,Maggy,22,35000,sales)})

同様に、以下に示すように、 emp_bonus 関係から emp_sales 関係を減算します。

grunt> sub_data = FOREACH cogroup_data GENERATE SUBTRACT(emp_bonus, emp_sales);

以下に示すように、ダンプ演算子を使用して sub_data 関係の内容を確認します。

grunt> Dump sub_data;

({})
({(2,Jaya,23,20000,admin)})
({})
({(4,Alia,25,50000,admin)})
({})
({(6,Omar,30,30000,admin)})