Apache pig: преобразование мешков в столбцы.

У меня есть вопрос PIG, связанный с преобразованием мешков в столбцы, подробности следующие:

(267720, {(201607),(201606),(201605)}, {(1),(3),(0)})
(806571, {(201607),(201606),(201605)}, {(28),(76),(75)}) 

Я хочу преобразовать его в:

266720 201607 1
266720 201606 3
266720 201605 0 
806571 201607 28
806571 201606 76 
806571 201605 75 

Я старался:

JG3 = FOREACH JG2 GENERATE company_id, flatten(date) as date, Flatten(new_hire) as newhire;   

Но не удается добиться точного совпадения между датой и новым наймом, будут повторяющиеся даты.

Кто-нибудь знает, как мне это сделать в Pig? Заранее спасибо!


person Jiarong    schedule 27.07.2016    source источник


Ответы (2)


То, как вы это делаете, создаст декартово произведение даты и столбца new_hire. Если у вас есть контроль над этими данными, сделайте это сопоставление перед созданием пакетов. Если нет, то вам нужно написать udf, чтобы сгенерировать это сопоставление один к одному.

person sorabh    schedule 27.07.2016
comment
Спасибо! Я новичок в Pig и никогда раньше не использовал UDF, можете ли вы дать более подробную информацию о том, какую UDF мне следует создать? - person Jiarong; 27.07.2016

Использовать ToBag()

JG3 = FOREACH JG2 GENERATE company_id, FLATTEN(TOBAG($1)), FLATTEN(TOBAG($2));   
person VK_217    schedule 27.07.2016