我是PIG的新手。我写了一个查询无法正常工作。我正在尝试处理提供给我的Google ngrams数据集。
我加载了1GB的数据
bigrams = LOAD '$(INPUT)' AS (bigram:chararray, year:int, occurrences:int, books:int);
然后我选择一个子集,该子集限制为2000个条目
limbigrams = LIMIT bigrams 2000;
然后看到有限数据的转储(粘贴示例输出)
(GB product,2006,1,1)
(GB product,2007,5,5)
(GB wall_NOUN,2007,27,7)
(GB wall_NOUN,2008,35,6)
(GB2 ,_.,1906,1,1)
(GB2 ,_.,1938,1,1)
现在我对边际图进行分组
D = GROUP limbigrams BY bigram;
当我看到D的数据转储时,我看到了一个完全不同的数据集(样本)
(GLABRIO 。,1977,3,3),(GLABRIO 。,1992,3,3),(GLABRIO 。, 1997,1,1),(GLABRIO 。,2000,6,6),(GLABRIO 。,2001,9,1),(GLABRIO 。< / em>,2002,24,3),(GLABRIO 。,2003,3,1)}) (玻璃贴膜,{(玻璃贴膜,1978,1,1),(玻璃贴膜,1976,2,1),(玻璃贴膜,1970,3,3),(玻璃贴膜,1966,7,1),(玻璃膜,1962,1,1),(玻璃膜,1958,1,1),(玻璃膜,1955,1,1),(玻璃膜,1899,2,2),(玻璃膜,1986,6 ,3),(玻璃膜,1984,1,1),(玻璃膜,1980,7,3)})
现在,我不附加整个输出,因为两个输出之间甚至没有一行重叠的行(即,分组前和分组后)。因此,查看输出文件真的没关系。
为什么会这样?
答案 0 :(得分:0)
转储准确。 Pig中的GROUP BY
运算符会为每个组创建一条记录,并将属于该组的每条记录放入包中。您确实可以在第二个转储的最后一条记录中看到这一点。唱片代表GLASS FILMS组,并有一个袋子,里面装有唱片,唱片里有二元组作为GLASS FILMS。您可以在此处了解有关GROUP BY
运算符的更多信息:https://www.tutorialspoint.com/apache_pig/apache_pig_group_operator.htm