我是PIG的新手,我正在寻求帮助。 我有两个文件A(模板)和B(数据)都有巨大的非结构化内容。 议程是遍历文件B(数据)并查找文件A的每个模板(行)的计数。
我认为它应该在嵌套语句的循环中工作,但我不知道如何在猪中实现相同的目标。
示例: -
FILE1.TXT
hello ravi
hi mohit
bye sameer
hi mohit
hi abc
hello cds
hi assaad
FILE2.TXT
hi mohit
hi assaad
我需要对两行进行file2计数。 预期输出可能如下所示: -
hi mohit: 2
hi assaad: 1
请告诉我。
答案 0 :(得分:0)
让我们首先加载您的数据集:
data = LOAD 'file1.txt' AS (line:chararray);
templates = LOAD 'file2.txt' AS (template:chararray);
现在我们基本上需要在模板上加入上述关系。加入后,我们可以在模板上使用GROUP来获取每个模板的计数。然而,这需要2个map-reduce阶段,一个用于JOIN,一个用于GROUP BY。您可以在这里使用COGROUP。这是一个非常有用的操作,你可以在这里阅读更多相关信息:https://www.tutorialspoint.com/apache_pig/apache_pig_cogroup_operator.htm
cogroupedData = COGROUP data BY line, templates BY template;
templateLines = FILTER cogroupedData BY (NOT ISEmpty(templates));
templateCounts = FOREACH templateLines GENERATE
group AS template,
COUNT(data.line) AS templateCount;
DUMP templateCounts;
COGROUP的作用基本上类似于JOIN,然后是同一个键上的GROUP BY(本例中是模板)。它只需要一个map-reduce阶段。上面应用的过滤器是删除file2.txt
中没有模板的记录