4

リレーションの列の 1 つに区切られた値 (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だけで可能かどうか知りたいです。

4

1 に答える 1

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 ...;
于 2011-08-25T18:57:42.377 に答える