1

我的 PIG 查询如下


emp = LOAD 'hdfs://master:9000/hrms/DimEmployee' AS  (EmployeeID,OrganizationID,EmploymentType);
grouped = group emp by (OrganizationID, EmploymentType);
AggEmploymentType = FOREACH grouped GENERATE group.OrganizationID, group.EmploymentType,COUNT(emp.EmployeeID) as cnt;
DUMP AggEmploymentType;

下面给出了上述猪查询的分步说明。

  1. 从制表符分隔的 HDFS 文件中加载 100097 条记录。
  2. 按公司记录分组,就业状态
  3. 按 EmployeeID 统计记录。
  4. 转储输出。

执行上述查询后,Pig shell 说,成功读取了 100115 条记录。

在 Pig 查询成功执行后,我得到以下三个问题:

  1. 为什么 pig 准备的记录多于 HDFS 中可用的记录 (100115>100097)
  2. 为什么有警告消息“ACCESSING_NON_EXISTENT_FIELD 27 TIMES”
  3. 当我在 MySQL 中按查询运行相同的组时,结果的计数差异为 9。

请尽快解决我的问题。我的猪,hadoop 项目取决于您的及时响应。由于上述问题,我从过去 5 天开始感到震惊

4

1 回答 1

0

我不认为您正在加载额外的记录并且您也正在访问不存在的字段错误是巧合。当您加载并且没有足够的列时,会显示不存在的字段错误。例如,如果您看到如下行,您可能会收到错误消息:hello,world当您预期 3 列时。

建议:另外需要注意的是COUNT(x)不计算为空的项目。尝试换掉COUNT(emp.EmployeeID). 考虑空值。COUNT_STAR(emp.EmployeeID)COUNT_STAR

建议: Pig 在没有字段时会做的一件事就是在其中放入空值。我建议您在GROUP删除带有空值的记录(以及可能的“坏”记录)之前添加一个过滤器。

emp = FILTER emp BY EmployeeID IS NOT NULL AND 
                    OrganizationID IS NOT NULL AND
                    EmploymentType IS NOT NULL;
于 2012-07-20T18:22:39.887 回答