我正在使用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
你认为这是可能的吗?有什么想法吗?
答案 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类似。
选择域名,来自源组的总和(计数);