0

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

www.google.nl 3

www.google.it 3

www.google.com.co 3

www.google.com.hk 3

www.google.co.jp 3

我想将所有具有“google”的域组合或组合为 1 行。对于所有 google 域,输出报告将只有 1 行。像这样的东西:

www.google.com 15

或者

谷歌 15

你认为这可能吗?有任何想法吗?

4

2 回答 2

0

只要您了解如何设置水龙头并将它们连接到您的管道,您就可以使用诸如RegexMatcher搜索^www\\.google.*并将它们放在单独的列中然后用于CountBy计算的功能。

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

希望这可以帮助!

于 2013-06-13T21:13:22.930 回答
0

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

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

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

管道结果 = new AggregateBy("name" , Pipe.pipes(sourcePipeName) , name_of_groupBy_field , number_of_SumBy_instances , name_of_sumBy_instance);

在你的情况下,它变成

SumBy xyz = new SumBy(new Fields("count") , new Fields("combined_count") , Integer.class);

管道结果 = new AggregateBy("result" , Pipe.pipes(sourcePipeName) , new Fields("domain") , 1 , xyz);

所以现在结果管道包含一行(google,count

所以上面的代码片段将类似于下面的 SQL 查询。

通过域从源组中选择域,总和(计数);

于 2018-02-02T17:38:22.093 回答