pig查询和mysql查询结果在groupby中的计数差异

mcvgt66p  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(225)

我的问题如下

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;

下面是对上述pig查询的逐步描述。
从制表符分隔的hdfs文件加载100097条记录。
按记录按公司、员工状态分组
按employeeid统计记录。
转储输出。
在执行上述查询之后,pig shell说,成功读取了100115条记录。
在pig查询成功执行后,我得到以下三个问题:
为什么pig准备好了比hdfs中更多的记录(100115>100097)
为什么会出现警告消息“访问\u不存在\u字段27次”
在mysql中运行同一个groupby查询时,结果的计数差为9。
请尽快解决我的问题。我的Pig,hadoop项目取决于你的迅速React。由于上述问题,我在过去5天内一直感到震惊

tf7tbtn2

tf7tbtn21#

我不认为这是巧合,你正在加载额外的记录,你也得到访问不存在的字段错误。当您正在加载并且没有足够的列时,会显示不存在的字段错误。例如,如果看到以下行,则可能会出现错误: hello,world 当你需要3列的时候。
建议:另外需要注意的是 COUNT(x) 不计算为空的项。试着换掉 COUNT(emp.EmployeeID)COUNT_STAR(emp.EmployeeID) . COUNT_STAR 考虑空值。
建议:当pig没有字段时,它会做的一件事就是在其中输入null。我建议你在测试前加一个过滤器 GROUP 这将删除具有空值的记录(也可能是“坏”记录)。

emp = FILTER emp BY EmployeeID IS NOT NULL AND 
                    OrganizationID IS NOT NULL AND
                    EmploymentType IS NOT NULL;

相关问题