pig:从文件B中获取文件A中的字符串数

时间:2018-04-23 12:42:11

标签: apache-pig

我是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

请告诉我。

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

中没有模板的记录