2016-11-07 4 views
0

Это мои данные выборки (атрибуты) в соответствии с:Regex Extract Все, используя свинью

[87027^适用年龄#619081^12-36个月,108389^国产/进口#619192^国产,108376^包装单位#619113^盒装,12210^分类#121491^牛奶粉,108385^奶源产地#619164^澳洲/新西兰,115919^配方#651827^常规配方奶粉,12212^段位#121499^3段,108380^净含量#619152^2kg以上] 
[108385^奶源产地#619183^其它 ,12212^段位#121499^3段,87027^适用年龄#619081^12-36个月,108376^包装单位#619120^桶装,108389^国产/进口#619196^进口,12210^分类#121491^牛奶粉,115919^配方#651827^常规配方奶粉,12241^价格#121803^200-299元,108380^净含量#619147^800-1000g] 
[87027^适用年龄#619081^12-36个月,108389^国产/进口#619192^国产,108376^包装单位#619113^盒装,12210^分类#121491^牛奶粉,108385^奶源产地#619164^澳洲/新西兰,115919^配方#651827^常规配方奶粉,12212^段位#121499^3段,108380^净含量#619152^2kg以上] 

Так что я пытаюсь соответствовать со всеми значениями между числами. Поэтому для первой строки данных я хотел бы соответствовать значению между 87027 и 619081 и значением между 619081 и 108389 и т. Д. Для каждого значения.

Вот мой код до сих пор:

data = LOAD 'SHORT.txt' USING PigStorage() AS (number:chararray, user:chararray, item:chararray, attributes:chararray); 
B = FOREACH data GENERATE REGEX_EXTRACT_ALL (attributes, '\\^(.*?)[#|,|\\]]'); 

DUMP B; 

Пожалуйста, дайте мне знать, если вы есть любая другая информация, необходимая. Благодаря!

+0

Любопытный. Помог ли мой ответ? – tmslnz

+0

Я понимаю регулярное выражение, которое вы предоставили, и оно работает в указанной вами ссылке, но я все еще не могу заставить код работать. – gambaboy

+0

мой выход только отображается как: () () () – gambaboy

ответ

0

Эта модель отражает то, что вы описали:

\d+?(\^.+?[,#\]]) 

Пример здесь: https://regex101.com/r/pOPWwY/2

Похоже Hadoop нужен двойной вытекание обратного слэша, поэтому имейте это в виду при тестировании выше.

Если хотите исключить маркеры , # ], то:

\d+?(\^.+?)[,#\]]