복붙노트

[HADOOP] 돼지의 group_concat?

HADOOP

돼지의 group_concat?

Pig에서이 작업을 수행하려고합니다. (MySQL과 동등한 group_concat () 찾기)

내 테이블에서 예를 들어, 나는 이것을 가지고 : (3fields - 사용자 ID, 클릭 수, 페이지 번호)

155 | 2 | 12
155 | 3 | 133
155 | 1 | 144
156 | 6 | 1
156 | 7 | 5

원하는 출력은 다음과 같습니다.

155| 2,3,1 | 12,133,144

156| 6,7 | 1,5

PIG에서 어떻게 이것을 달성 할 수 있습니까?

해결법

  1. ==============================

    1.

    grouped = GROUP table BY userid;
       X = FOREACH grouped GENERATE group as userid, 
                                    table.clickcount as clicksbag, 
                                    table.pagenumber as pagenumberbag;
    

    이제 X는 :

    {(155,{(2),(3),(1)},{(12),(133),(144)},
     (156,{(6),(7)},{(1),(5)}}
    

    이제 내장 UDF Bag To Tuple을 사용해야합니다.

    output = FOREACH X GENERATE userid, 
                                BagToTuple(clickbag) as clickcounts, 
                                BagToTuple(pagenumberbag) as pagenumbers;
    

    출력에는 이제 원하는 것을 포함해야합니다. 출력 단계를 병합 단계로 병합 할 수도 있습니다.

        output = FOREACH grouped GENERATE group as userid, 
                         BagToTuple(table.clickcount) as clickcounts, 
                         BagToTuple(table.pagenumber) as pagenumbers;
    
  2. from https://stackoverflow.com/questions/18780201/group-concat-equivalent-in-pig by cc-by-sa and MIT license