Используя PIG с Hadoop, как я могу сопоставить части текста с неизвестным числом групп? - PullRequest
3 голосов
/ 30 декабря 2010

Я использую карту упругости Amazon.

У меня есть файлы журналов, которые выглядят примерно так

   random text foo="1" more random text foo="2"
   more text notamatch="5" noise foo="1"
   blah blah blah foo="1" blah blah foo="3" blah blah foo="4" ...

Как мне написать выражение «свинья», чтобы выбрать все числа в выражениях «foo»?

Я предпочитаю кортежи, которые выглядят примерно так:

(1,2)
(1)
(1,3,4)

Я пробовал следующее:

TUPLES = foreach LINES generate FLATTEN(EXTRACT(line,'foo="([0-9]+)"'));

Но это дает только первое совпадение в каждой строке:

(1)
(1)
(1)

Ответы [ 2 ]

0 голосов
/ 04 сентября 2014

Функция REGEX_EXTRACT может помочь вам получить желаемый результат

REGEX_EXTRACT (вход, 'foo = (. *)', 2) вход AS;

0 голосов
/ 30 декабря 2010

Вы можете использовать STRSPLIT: http://pig.apache.org/docs/r0.8.0/piglatin_ref2.html#STRSPLIT

Регулярное выражение для разделения будет [^0-9]+ (т. Е. Не числами). Это будет эффективно разделять на большие части не чисел, оставляя только токеныцифр.

Другой вариант - написать UDF для Pig.

...