Pig Latin: номер фильтра <5 и> = 5 в chararray (текст и цифры) - PullRequest
0 голосов
/ 28 марта 2019

Как я могу отфильтровать или сгруппировать тех, у кого меньше 5 лет и тех, у кого больше 5 лет.Я очень новичок в Pig Latin.Идентификатор, например BUS2003, должен быть оставлен как есть.

Входные данные

ID,Experience
BUS2003,More than 17 years teaching experience
BUS1303,2 years teaching experience
BUS4543,13 plus years of teaching experience; 4 plus years of corporate experience
BUS2103,4 year + 6 years in business
BUS2913,8 yrs teaching experience

Я знаю, как загрузить данные в PigStorage или CSVloader, однако мне трудно решитьОпыт из-за того, что слова и цифры находятся вместе.

Желаемый результат:

**Less than five years**
BUS1303,2 years teaching experience
BUS2103,4 year + 6 years in business

**Equal or greater than five years**
BUS2003,More than 17 years teaching experience
BUS4543,13 plus years of teaching experience; 4 plus years of corporate experience
BUS2913,8 yrs teaching experience

Заранее спасибо.

1 Ответ

1 голос
/ 28 марта 2019

Вы должны будете извлечь число и затем разделить. Это должно получить то, что вы ищете

A = LOAD 'input.txt' USING PigStorage(',') AS (a1:chararray,a2:chararray);
B = FOREACH A GENERATE a1,a2,REGEX_EXTRACT(a2,'(\\d*)',1) as exp:int;
C = SPLIT B INTO C1 IF B.exp < 5, C2 IF B.exp >= 5;
DUMP C1;
DUMP C2;
...