题
在运行以下猪脚本时,我会在LINE4中遇到错误:如果是组,那么我会遇到错误。如果我从LINE4中的“组”更改为“组”,则脚本正在运行。
组和组有什么区别?
LINES = LOAD '/user/cloudera/datapeople.csv' USING PigStorage(',') AS ( firstname:chararray, lastname:chararray, address:chararray, city:chararray, state:chararray, zip:chararray );
WORDS = FOREACH LINES GENERATE FLATTEN(TOKENIZE(zip)) AS ZIPS;
WORDSGROUPED = GROUP WORDS BY ZIPS;
WORDBYCOUNT = FOREACH WORDSGROUPED GENERATE GROUP AS ZIPS, COUNT(WORDS);
WORDSSORT = ORDER WORDBYCOUNT BY $1 DESC;
DUMP WORDSSORT;
解决方案
在foreach中,严格较低的情况是您正在循环/分组的东西。
http://squarecog.wordpress.com/2010/05/11/group-operator-in-apache-pig/ 说:
当您对A分组关系时,结果是一个新的关系,其中有两个列:“组”和原始关系的名称。
列名称敏感,因此您必须在foreach中使用较低的“组”。
在高层情况下,“小组”是分组操作员。你不能混合它们。所以不要那样做。
其他提示
通常,组/cogroup用于通过某些键进行分组。分组后,关系描述分组关系。 grp:{group:chararray,a:{(名称:chararray,session:chararray,gpa:float)}}}。
在上述结果中,您可以找到“组”。
如果要对分组关系(GRP)执行一些操作,则应使用“组”而不是组。