Pig SUM 函数

  • SUM 函数

    Pig-Latin SUM()您可以使用Pig Latin的SUM() 函数来获取单列袋中一列的数值的总和。在计算总数时,SUM() 函数将忽略NULL值。
    注意-
    • 若要获取全局总和值,我们需要执行“Group all”操作,并使用SUM() 函数计算总和值。
    • 要获得组的总和,我们需要使用Group By运算符将其分组,然后继续求和功能。
    句法
    下面给出的是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()(区分大小写)来计算数值的总和。让我们使用“所有分组”运算符将雇员名_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)