Разделить символы внутри поля Pig

У меня есть текстовый ввод с '|' разделитель как

0.0000|25000|                    |BM|BM901002500109999998|SZ

который я разделил с помощью PigStorage

A = LOAD '/user/hue/data.txt' using PigStorage('|');

Теперь мне нужно разделить поле BM901002500109999998 на разные поля в зависимости от их положения, скажем, 0-2 = BM - Field1 и тому подобное. Итак, после этого шага я должен получить BM, 90100, 2500, 10, 9999998. Есть ли способ в скрипте Pig добиться этого, иначе я планирую написать UDF и поставить разделители на нужные позиции.

Спасибо.


person Abhi    schedule 19.05.2015    source источник
comment
вы ищете подстроку? pig.apache.org/docs/ r0.8.1/api/org/apache/pig/builtin/   -  person kanchirk    schedule 19.05.2015


Ответы (2)


Вы ищете SUBSTRING:

A = LOAD '/user/hue/data.txt' using PigStorage('|');
B = FOREACH A GENERATE SUBSTRING($4,0,2) AS FIELD_1, SUBSTRING($4,2,7) AS FIELD_2, SUBSTRING($4,7,11) AS FIELD_3, SUBSTRING($4,11,13) AS FIELD_4, SUBSTRING($4,13,20) AS FIELD_5;

Результат будет:

dump B;
(BM,90100,2500,10,9999998)

Дополнительную информацию об этой функции можно найти здесь. .

person Balduz    schedule 19.05.2015
comment
Спасибо, Балдуз, это именно то, что я искал. - person Abhi; 19.05.2015

Я думаю, что будет намного эффективнее использовать встроенную пользовательскую функцию REGEX_EXTRACT_ALL.
Вы можете получить некоторое представление о том, как использовать эту пользовательскую функцию, из:

person Zach Beniash    schedule 03.06.2015