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)