2011-08-25 1 views
4

내 관계에있는 열 중 하나에 구분 된 값 (예 : csv)이 포함되어 있으며 이러한 값을 분리하여 모든 값에 대한 관계에 항목이 포함되도록하고 싶습니다. 원자 값을 가진 다른 컬럼). 나는 다음과 같은 데이터가 있다면 예를 들어, : 구분 된 chararray를 여러 튜플로 확장하십시오.

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 및 내장/돼지 저금통 UDF를 사용하여 수행 할 수 있습니까? 참고 : 필자가 작성한 UDF와 관련된 해킹 된 솔루션이 있는데, 이것이 돼지와 가능한지 알고 싶습니다.

답변

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

정확히 내가 뭘 찾고 있었는지, 고마워! –

+0

이 코드는 돼지 0.9.1 설치시 작성된 것으로 작동합니다. (가정 ... 물론 정확하게 기입). – spazm