在级联中组合输出

时间:2013-06-03 16:14:00

标签: filter cascading

我正在使用Cascading分析具有各种域名的日志文件。以下是过滤后输出报告的示例:

www.google.nl 3

www.google.it 3

www.google.com.co 3

www.google.com.hk 3

www.google.co.jp 3

我想将所有“谷歌”的域名分组或合并为一行。所有谷歌域名的输出报告只有1行。像这样:

www.google.com 15

google 15

你认为这是可能的吗?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

只要您了解如何设置点按并将其绑定到管道,就可以使用RegexMatcher之类的功能搜索^www\\.google.*并将它们放在单独的列中,然后使用{{3想出一个计数。

您应该能够在两个管道中完成此特定任务。一个用于从您的链接中获取Google,另一个用于计算它们。

希望这有帮助!

答案 1 :(得分:0)

可以级联。 假设您的字段名称是(url,count)。 应用一个函数来添加一个名为" domain"的字段。如果行包含单词 google 并丢弃网址字段,则包含值google。 现在,如果您不需要任何其他域,请将其过滤掉。 所以现在你有两个字段(域名,计数),其中域只包含单词谷歌

现在使用级联的AggregateBy(),SumBy()函数。

SumBy any_name = new SumBy(field_name_to_sum,field_name_after_sum,dataType class);

管道结果=新的AggregateBy("名称",Pipe.pipes(sourcePipeName),name_of_groupBy_field,number_of_SumBy_instances,name_of_sumBy_instance);

在你的情况下变成

SumBy xyz = new SumBy(新字段(" count"),新字段(" combined_count"),Integer.class);

管道结果=新的AggregateBy("结果",Pipe.pipes(sourcePipeName),新字段("域"),1,xyz);

所以现在结果管道包含一行(谷歌,计数

因此,上面的代码片段将与下面的SQL Query类似。

选择域名,来自源组的总和(计数);