Свинья Латинская Фильтр по списку строк - PullRequest
1 голос
/ 01 марта 2012

У меня есть файл, содержащий URL-адреса, и 3 файла, которые содержат URL-адреса, которые я хочу увидеть, существуют ли они в первом файле

Пример первого файла:

http://www.url1.com/xxxx/xxx/xxx/xxx/,

http://www/urln.com/zzz/zzz/zzz/zzzz/zzzz/zz

пример файлов фильтров:

filter1

url1.com

url2.com

filter2

url5.com

url6.com / ddfd

urlx.org

Что я хочусделать это на том же проходе (если это возможно) проверить, если любой URL-адрес из фильтра 1 или любой URL-адресов в фильтре 2 и т. д. в первом файле, и если это записьсовпадение с файлом, названным в честь этого фильтра (имя фильтра не имеет значения).Важно, чтобы каждый выход фильтра

был примерно таким

filter1.out

http: // www.url1.com/xxx/sss http: // www.url2.com / ххх / хххх / хххх

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Предполагая, что файлы фильтра помещаются в память на вычислительных узлах - используйте Perl или другой любимый язык для сопоставления и потоковой передачи данных через этот фильтр, например ::10000

DEFINE MY_FILTER ` perl $script $filter1 $filter2 filter3 ` SHIP('$script','$filter1', '$filter2', '$filter3');
A = load '$input';
B = stream A through MY_FILTER;
store B into '$output';

Это выполняется за один проход. Вызовите этот сценарий Pig из сценария bash, который определяет $ filter и другие параметры. Реализуйте сопоставление строк и вывод в сценарии $, который будет загружать $ filter1, $ filter2 и $ filter3, выполнять сопоставление из STDIN и производить вывод в нужном формате.

2 голосов
/ 08 марта 2012

Я дам высокоуровневое описание того, что я буду делать в вашей обуви:

  1. Загрузить все файлы как наборы данных. Мы можем назвать их URL, filter1, filter2 и filter3
  2. Если я правильно понимаю, между этими тремя фильтрами нет разницы, так что просто СОЕДИНИТЕ их вместе, как новый набор данных, который мы назовем big_filter.
  3. Соединение URL с помощью big_filter с использованием регулярного выражения для извлечения базового URL из URL. REGEX_EXTRACT является встроенной функцией Pig. Внутреннее объединение избавит от всех элементов в URL, которых нет в фильтре.
  4. GENERATE только столбец url из результирующего набора данных.
  5. Запустите DISTINCT для набора данных, сгенерированного на шаге 4.
  6. Сохраните набор данных, сгенерированный на шаге 5, с помощью одной из различных функций STORE в любой удобной для вас форме.
...