You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Pig统计CHICAGO员工总薪资报sum无法解析错误排查

Pig脚本统计员工薪资总额报错ERROR 1070问题修复

需求说明

基于提供的emp1.csv、dept.csv文件分别创建员工表、部门表:

  • 员工表(Emp)字段:Empno, name, sal, did, branch, dno
  • 部门表(Dept)字段:deptno, name, loc
    需统计工作地点为'chicago'的员工应付薪资总额。

样例数据

员工表emp数据如下:

1010,jack,45000,CSE,10
1011,nick,70000,ECE,20
1012,mike,60000,ECE,30
1013,james,25000,CSE,20

部门表dept数据如下:

10,ACCOUNTING,DALLAS
20,OPERATIONS,CHICAGO
30,SALES,BOSTON

问题复现

已编写的Pig两表关联脚本内容如下:

grunt> emp_data = load ‘student/emp1.csv’ using PigStorage(‘,’) as (empno: int, empname: 
       chararray, sal: int, did: chararray, branch: chararray, dno: int);

grunt> emp_dept = load ‘student/dept.csv’ using PigStorage(‘,’) as (deptno: int, name: 
       chararray, loc: chararray);
grunt> joined = join emp_data by dno, emp_dept by deptno;
grunt> emp_loc = joined by loc matches 'CHICAGO';
grunt> total_sal = foreach emp_loc generate sum(sal);

执行最后一行代码时抛出错误,错误信息如下:

EROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve sum using import: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]

已知该需求正确计算结果为95000,需定位脚本错误原因,完成正确统计。

错误原因定位

原脚本共存在3处核心问题,直接触发运行异常:

  • 过滤操作缺失FILTER关键字:Pig中按条件筛选数据行必须遵循FILTER 关系名 by 过滤条件的语法规范,原脚本直接写joined by loc matches 'CHICAGO'属于非法语法,生成的emp_loc不是合法的结构化关系。
  • 聚合函数使用逻辑错误:SUM是聚合类内置函数,仅能对分组后生成的字段包(bag)做聚合计算,不能直接在逐行遍历的foreach语句中对单行sal字段调用。
  • 路径包裹使用了中文全角单引号:加载数据的文件路径使用了中文全角单引号,会触发路径解析错误,需统一替换为英文半角单引号。

正确实现脚本

修复后可正常运行的Pig脚本如下:

-- 加载员工表数据,统一使用英文半角引号
emp_data = load 'student/emp1.csv' using PigStorage(',') as (empno: int, empname: chararray, sal: int, did: chararray, branch: chararray, dno: int);
-- 加载部门表数据
emp_dept = load 'student/dept.csv' using PigStorage(',') as (deptno: int, name: chararray, loc: chararray);
-- 按员工所属部门编号、部门编号关联两表
joined = join emp_data by dno, emp_dept by deptno;
-- 筛选工作地点为CHICAGO的员工记录
emp_loc = filter joined by loc matches 'CHICAGO';
-- 全量聚合使用all分组,调用SUM计算薪资总和
grouped = group emp_loc all;
total_sal = foreach grouped generate SUM(emp_loc.sal) as total_chicago_sal;
-- 打印计算结果
dump total_sal;

脚本运行后输出结果为(95000),和预期计算结果一致。


内容的提问来源于stack exchange,提问作者Arsalan Ansari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:06:09