2016-03-15 2 views
0

У меня есть образец свиной скрипт с данными, которые будут читать csv-файл и выгружать его из экрана; однако мои данные имеют пары значений имени. как я могу прочитать в строке пар значений имени и разделить пары, используя имя для поля и значение для значения?Apache Pig чтение значений пар значений в файле данных

данные:

1,Smith,Bob,Business Development 
2,Doe,John,Developer 
3,Jane,Sally,Tester 

Сценарий:

data = LOAD 'example-data.txt' USING PigStorage(',') 
      AS (id:chararray, last_name:chararray, 
      first_name:chararray, role:chararray); 
DESCRIBE data; 
DUMP data; 

выход:

data: {id: chararray,last_name: chararray,first_name: chararray,role: chararray} 
(1,Smith,Bob,Business Development) 
(2,Doe,John,Developer) 
(3,Jane,Sally,Tester) 

однако, учитывая следующие входные (в виде пар имя-значение); как я могу обрабатывать данные, чтобы получить один и тот же «объект данных»?

id=1,last_name=Smith,first_name=Bob,role=Business Development 
id=2,last_name=Doe,first_name=John,role=Developer 
id=3,last_name=Jane,first_name=Sally,role=Tester 

ответ

0

Обратитесь к STRSPLIT

A = LOAD 'example-data.txt' USING PigStorage(',') AS (f1:chararray,f2:chararray,f3:chararray, f4:chararray); 
B = FOREACH A GENERATE 
       FLATTEN(STRSPLIT(f1,'=',2)) as (n1:chararray,v1:chararray), 
       FLATTEN(STRSPLIT(f2,'=',2)) as (n2:chararray,v2:chararray), 
       FLATTEN(STRSPLIT(f3,'=',2)) as (n3:chararray,v3:chararray), 
       FLATTEN(STRSPLIT(f4,'=',2)) as (n4:chararray,v4:chararray); 
C = FOREACH B GENERATE v1,v2,v3,v4; 
DUMP C; 
+0

смысла иметь пары значений имени является то, что порядок не имеет значения; могу ли я установить окончательный GENERATE на v1 AS VALUE_OF (n1), ... что почему каждое имя переменной сохраняется как assoated со значением –

Смежные вопросы