Apache-pig-sum
提供:Dev Guides
Apache Pig-SUM()
Pig Latinの* SUM()関数を使用して、単一列バッグ内の列の数値の合計を取得できます。 合計の計算中、 SUM()*関数はNULL値を無視します。
注-
- グローバルな合計値を取得するには、 Group All 操作を実行し、SUM()関数を使用して合計値を計算する必要があります。
- グループの合計値を取得するには、 Group By 演算子を使用してグループ化し、sum関数を続行する必要があります。
構文
以下に、* SUM()*関数の構文を示します。
grunt> SUM(expression)
例
以下に示すように、HDFSディレクトリ /pig_data/ に employee.txt という名前のファイルがあると仮定します。
*employee.txt*
1,John,2007-01-24,250
2,Ram,2007-05-27,220
3,Jack,2007-05-06,170
3,Jack,2007-04-06,100
4,Jill,2007-04-06,220
5,Zara,2007-06-06,300
5,Zara,2007-02-06,350
そして、以下に示すように、このファイルを関係名 employee_data でPigにロードしました。
grunt> employee_data = LOAD 'hdfs://localhost:9000/pig_data/employee.txt' USING PigStorage(',')
as (id:int, name:chararray, workdate:chararray, daily_typing_pages:int);
すべてのGPAの合計を計算する
- SUM()関数を示すために、すべての従業員の毎日入力されるページの総数を計算してみましょう。 Apache Pigの組み込み関数 SUM()(大文字と小文字を区別)を使用して、数値の合計を計算できます。 *Group All 演算子を使用してリレーションemployee_dataをグループ化し、次に示すようにemployee_groupというリレーションに結果を保存します。
grunt> employee_group = Group employee_data all;
以下に示すような関係が生成されます。
grunt> Dump employee_group;
(all,{(5,Zara,2007-02-06,350),
(5,Zara,2007-06-06,300),
(4,Jill,2007-0406,220),
(3,Jack,2007-04-06,100),
(3,Jack,2007-05-06,170),
(2,Ram,2007-0527,220),
(1,John,2007-01-24,250)})
毎日入力されたページのグローバル合計を計算してみましょう。
grunt> student_workpages_sum = foreach employee_group Generate
(employee_data.name,employee_data.daily_typing_pages),SUM(employee_data.daily_typing_pages);
検証
以下に示すように、 DUMP 演算子を使用して、リレーション student_workpages_sum を確認します。
grunt> Dump student_workpages_sum;
出力
次の出力が生成され、リレーション student_workpages_sum の内容が次のように表示されます。
(({ (Zara), (Zara), (Jill) ,(Jack) , (Jack) , (Ram) , (John) },
{ (350) , (300) , (220) ,(100) , (170) , (220) , (250) }),1610)