Объединение выходов в каскаде

Я анализирую файлы журналов с различными доменными именами, используя 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. Что-то вроде этого:

www.google.ru 15

or

гугл 15

Как вы думаете, это возможно? Любые идеи?


person cevallos.valtira    schedule 03.06.2013    source источник


Ответы (2)


Если вы понимаете, как настраивать краны и привязывать их к каналам, вы можете использовать такие функции, как RegexMatcher для поиска ^www\\.google.* и помещения их в отдельный столбец, а затем используйте CountBy, чтобы подсчитать количество.

Вы должны быть в состоянии выполнить эту конкретную задачу в двух каналах. Один для того, чтобы вытащить Google из ваших ссылок, а другой для их подсчета.

Надеюсь это поможет!

person Engineiro    schedule 13.06.2013

Можно в каскаде. Предположим, ваши имена полей (url, count). Примените функцию, чтобы добавить еще одно поле с именем «домен», которое содержит значение google, если строка содержит слово google, и удалите поле URL. Теперь, если вам не нужны другие домены, отфильтруйте их. Итак, теперь у вас есть два поля (домен, количество), где домен содержит только слово google.

Теперь используйте функции каскадирования AggregateBy(), SumBy().

SumBy any_name = new SumBy(field_name_to_sum , field_name_after_sum , класс dataType);

Pipe result = 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);

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

Итак, теперь канал результатов содержит одну строку (google,count)

Таким образом, приведенный выше фрагмент кода будет работать аналогично приведенному ниже SQL-запросу.

выбрать домен,сумма(количество) из исходной группы по домену;

person jaydeep dugar    schedule 02.02.2018