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

pig: getting count of strings from file A from file B

我是 PIG 的新手,我正在寻求帮助。 我有两个文件 A(模板)和 B(数据)都有大量的非结构化内容。 议程是遍历文件 B(数据)并针对文件 A 的每个模板(行)找到计数。

我认为它应该在嵌套语句的循环中工作,但我不知道如何在 pig 中实现相同的效果。

示例:-

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

请告诉我。

让我们从加载您的两个数据集开始:

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

中没有模板的记录