Разложите разделенный chararray на несколько кортежей - PullRequest
4 голосов
/ 25 августа 2011

Один из столбцов в моем отношении содержит значения с разделителями (например, csv), и я хочу разбить их на эти значения, чтобы у меня была запись в отношении для каждого значения (в сочетании с другими столбцами, которые имеют атомарные значения) ). Например, если у меня были следующие данные:

SomeID|Age|CommaSeperatedNames
1     |23 |Steve,Joe,Bob
2     |26 |Dan,Mike,Tom

Я бы хотел, чтобы результирующее отношение содержало:

SomeID|Age|Names
1     |23 |Steve
1     |23 |Joe
1     |23 |Bob
2     |26 |Dan
2     |26 |Mike
2     |26 |Tom

Можно ли это сделать, используя только PigLatin и встроенную / piggybank UDFS? Примечание: у меня есть хакерское решение, включающее UDF, который я написал, я хотел бы знать, возможно ли это только с помощью Pig.

1 Ответ

5 голосов
/ 25 августа 2011

TOKENIZE разделит ваши имена на сумки.Затем, если вы наберете FLATTEN на сумке, он будет разбит по строкам.Если TOKENIZE не помечает, как вы хотите (должно работать с запятыми), вам, вероятно, придется написать какой-то UDF, который выписывает пакет.

A = LOAD ... USING PigStorage('|') AS (SomeID, Age, Names);    
B = FOREACH A GENERATE SomeID, Age, FLATTEN(TOKENIZE(Names)) as Name;
C = STORE B INTO ...;
...