将分隔的chararray扩展为多个元组

时间:2011-08-25 02:36:11

标签: apache-pig

我的关系中的一列包含分隔值(例如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的hacky解决方案,我想知道这是否可以只用Pig。

1 个答案:

答案 0 :(得分:5)

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 ...;