【问题标题】:AVG, MIN, MAX error in Pig while COUNT worksCOUNT 工作时 Pig 中的 AVG、MIN、MAX 错误
【发布时间】:2015-11-27 11:26:11
【问题描述】:

我正在尝试在 Pig 中使用 AVG,MIN,MAX。 MIN 和 MAX 函数在执行时都卡住了,并且 AVG 函数抛出错误。但是 COUNT 函数工作正常。

org.apache.pig.backend.executionengine.ExecException:错误 0:标量在输出中有不止一行。一等:(二年级老师,{(65587.90)}),二年级:(四年级老师,{(56567.24)})

我的代码:

register 'pig/contrib/piggybank/java/piggybank.jar';
define Replace org.apache.pig.piggybank.evaluation.string.REPLACE();
A = LOAD '/user/hduser/salaryTravel.csv' using org.apache.pig.piggybank.storage. CSVLoader()  AS (name:chararray,job:chararray,salary:chararray,TA:chararray,type:chararray,org:chararray,year:int);
B = foreach A generate name,job,REPLACE(salary,',','') as salary:float, REPLACE(TA,',','') as TA:float, type, org, year;
C = filter B by type=='LBOE';
D = filter C by year==2010;
E = group D by job;
number = foreach E generate group,COUNT(D.salary);
average = foreach E genetate group,AVG(D.salary);
minim = foreach E genetate group,MIN(D.salary);
maxim = foreach E genetate group,MAX(D.salary);

样本数据

 (ABBOTT,DEEDEE W,GRADES 9-12 TEACHER,52,122.10,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABBOTT,RYAN V,GRADE 4 TEACHER,56,567.24,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABBOUD,CLAUDIA MORA,GRADES K-5 TEACHER,63,957.50,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABDUL-JABBAR,KHADEEJA ,GRADES 9-12 TEACHER,16,791.73,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABDUL-RAZACQ,SALAHUD-DIN ,INSTRUCTIONAL SPECIALIST P-8,45,832.92,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABDULLAH,DIANA ,SPECIAL ED PARAPRO/AIDE,10,934.94,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABDULLAH,NADIYAH W,GRADES 6-8 TEACHER,75,109.92,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (ABDULLAH,RHONDALYN Y,SPECIAL ED PARAPRO/AIDE,28,649.34,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)
 (OSBORNE,CHRISTINE L,INSTRUCTIONAL SUPERVISOR,78,875.59,3,265.71,LBOE,COBB COUNTY SCHOOL DISTRICT,2010)
 (OSBORNE,DORIS A,OCCUPATIONAL THERAPIST ,65,421.79,1,156.05,LBOE,COBB COUNTY SCHOOL DISTRICT,2010)

第 7 行 GROUP 操作后的示例数据。

 (GRADE 2 TEACHER,{(OSBORNE,VIRGINIA E,GRADE 2 TEACHER,65587.90,0,LBOE,COBB COUNTY SCHOOL DISTRICT,2010)})
 (GRADE 4 TEACHER,{(ABBOTT,RYAN V,GRADE 4 TEACHER,56567.24,0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010)})
 (MAINTENANCE PERSONNEL,{(BROOKS,RICHARD M,MAINTENANCE PERSONNEL,72655.52,0,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010),(SUMNER,ROBERT O,MAINTENANCE PERSONNEL,72655.53,0,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010),(MCCULLOUGH,ALVIN J,MAINTENANCE PERSONNEL,72655.52,0,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010),(DALTON,JAMES E,MAINTENANCE PERSONNEL,72655.52,2124.60,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010),(SMITH,KEVIN W,MAINTENANCE PERSONNEL,72655.52,0,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010),(MANGHAM,LARRY G,MAINTENANCE PERSONNEL,72655.52,0,LBOE,FULTON COUNTY BOARD OF EDUCATION,2010)})

这是 Pig 中的错误吗?请帮帮我。

【问题讨论】:

  • 能否请您发布示例数据..它的样子
  • 为加载数据定义的 csv 数据格式和架构不匹配。您提供的输入数据看起来像是group by 命令的输出。请提供正确的数据。
  • @abhishekbafna 是的。我指的是第2行分组操作后的样本数据。它是第2行中'B'的样本。抱歉,麻烦了。
  • 问题解决了吗?

标签: count max apache-pig average min


【解决方案1】:

这是更新后的 Pig 脚本。

register 'pig/contrib/piggybank/java/piggybank.jar';
define Replace org.apache.pig.piggybank.evaluation.string.REPLACE();
A = LOAD '/user/hduser/salaryTravel.csv' using org.apache.pig.piggybank.storage. CSVLoader()  AS (name:chararray,job:chararray,salary:chararray,TA:chararray,type:chararray,org:chararray,year:int);
B = foreach A generate name,job,REPLACE(salary,',','') as salary, REPLACE(TA,',','') as TA, type, org, year;
B1 = foreach B generate name, job, (double)salary, (double)TA, type, org, year;
C = filter B1 by type=='LBOE';
D = filter C by year==2010;
E = group D by job;
number = foreach E generate group,COUNT(D.salary);
average = foreach E generate group,AVG(D.salary);
minim = foreach E generate group,MIN(D.salary);
maxim = foreach E generate group,MAX(D.salary);

问题是,您需要为 salaryTA 属性提供显式转换。

【讨论】:

  • 你得到了平均值,最小值和最大值吗?顺便说一句,没有额外的字段。这个名字有两个部分;名字和姓氏以逗号分隔。我可以计算 A.salary 的 COUNT,但 AVG 是不可能的。有什么想法吗?
  • 是的。名称有两部分。这就是为什么我在加载数据时将 name 和 lastname 两个属性放在模式中的原因。所有操作都运行良好。我提供的脚本适用于我从您的问题中提取的示例数据。
  • 好的。这在我的情况下不起作用。所以我用一些额外的行编辑了有问题的代码,这些行进行了一些过滤操作和清洁。请看一看。在这种情况下,我也可以计算 COUNT。
  • 能否提供您正在使用的示例数据,以便试用时保持一致。
  • 我已将脚本更新为您的。您不需要脚本中的第 2 步。我已经删除了。我还提供了avg 函数的输出。如果没有任何效果,那么只需从答案中复制示例数据和脚本并单独运行它们。让我知道接下来会发生什么。
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 2023-03-13
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多