Pig查询-在AWS EMR中给出不一致的结果

时间:2018-10-20 23:48:22

标签: apache-pig amazon-emr

我是PIG的新手。我写了一个查询无法正常工作。我正在尝试处理提供给我的Google ngrams数据集。

  1. 我加载了1GB的数据

    bigrams = LOAD '$(INPUT)' AS (bigram:chararray, year:int, occurrences:int, books:int);
    
  2. 然后我选择一个子集,该子集限制为2000个条目

    limbigrams = LIMIT bigrams 2000;
    
  3. 然后看到有限数据的转储(粘贴示例输出)

    (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)
    
  4. 现在我对边际图进行分组

    D = GROUP limbigrams BY bigram;
    
  5. 当我看到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)})

现在,我不附加整个输出,因为两个输出之间甚至没有一行重叠的行(即,分组前和分组后)。因此,查看输出文件真的没关系。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

转储准确。 Pig中的GROUP BY运算符会为每个组创建一条记录,并将属于该组的每条记录放入包中。您确实可以在第二个转储的最后一条记录中看到这一点。唱片代表GLASS FILMS组,并有一个袋子,里面装有唱片,唱片里有二元组作为GLASS FILMS。您可以在此处了解有关GROUP BY运算符的更多信息:https://www.tutorialspoint.com/apache_pig/apache_pig_group_operator.htm