Соответствие регулярному выражению Hadoop / Pig - PullRequest
1 голос
/ 18 апреля 2011

Это довольно странная ситуация, но я ищу способ фильтрации, используя что-то вроде MATCHES, но по списку неизвестных паттернов (неизвестной длины).

То есть, если данныйввод двух файлов, один с номерами A:

xxxx

гггг

zzzz

zzyy

... и т. д..

А другой с узорами B:

хх. *

гггг. *

... и т.д ...

Как я могу отфильтровать первый вход по всем шаблонам второго?

Если бы я знал все шаблоны заранее, я мог бы A = FILTER A BY (num MATCHES 'somepattern. *' OR num MATCHES'someotherpattern' ....);

Проблема в том, что я не знаю их заранее, и поскольку они являются шаблонами, а не простыми строками, я не могу просто использовать объединения / группы (по крайней мере, насколько это возможно).как я могу сказать).Может быть странная вложенная вещь FOREACH ...?Есть идеи?

1 Ответ

3 голосов
/ 18 апреля 2011

Если вы используете |, который работает как OR, вы можете создать шаблон из отдельных шаблонов.

(xx.*|yyy.*|zzzz.*)

Это позволит проверить, соответствует ли оно любому изPatterns.

Редактировать: Чтобы создать объединенный шаблон регулярных выражений:
* Создайте строку, начинающуюся с (
* Прочитайте в каждой строке (предполагая, что каждая строка является шаблоном) и добавьте ее кстрока, за которой следует |
* Когда закончите чтение строк, удалите последний символ (который будет ненужным |)
* Добавьте )

Это создаст регулярное выражениешаблон для проверки всех шаблонов во входном файле.(Примечание: предполагается, что файл содержит допустимые шаблоны)

...