복붙노트

[HADOOP] 돼지의 그룹화 된 데이터에서 bigram 조합 생성

HADOOP

돼지의 그룹화 된 데이터에서 bigram 조합 생성

userid, itemid 형식의 입력 데이터가 주어지면 :

raw: {userid: bytearray,itemid: bytearray}

dump raw;
(A,1)
(A,2)
(A,4)
(A,5)
(B,2)
(B,3)
(B,5)
(C,1)
(C,5)

grpd = GROUP raw BY userid;

dump grpd;

(A,{(A,1),(A,2),(A,4),(A,5)})
(B,{(B,2),(B,3),(B,5)})
(C,{(C,1),(C,5)})

각 그룹 내 항목의 모든 조합 (주문 중요하지 않음)을 생성하고 싶습니다. 나는 결국 내 그룹의 아이템에 jaccard 유사성을 수행하려고합니다.

이상적으로 내 bigrams가 생성 된 다음 출력을 다음과 같이 표시합니다.

(A, (1,2))
(A, (1,3))
(A, (1,4))
(A, (2,3))
(A, (2,4))
(A, (3,4))
(B, (1,2))
(B, (2,3))
(B, (3,5))
(C, (1,5))

사용자 ID를 나타내는 ABC 문자는 실제로 출력에 필요하지 않으며 단지 설명을 위해 표시합니다. 여기에서 자카드를 계산하기 위해 각 bigram의 발생 횟수를 계산합니다. 다른 사람이 비슷한 유사성 계산기에 돼지를 사용하고 있는지 이미 알고 싶습니다. (죄송합니다!)이를 이미 경험했습니다.

돼지 튜토리얼과 함께 제공되는 NGramGenerator를 살펴 보았지만 실제로 달성하려는 것과 일치하지 않습니다. 파이썬 스트리밍 UDF가 갈 길인지 궁금합니다.

해결법

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

    1.확실히 UDF를 작성해야 할 것입니다 (Python 또는 Java에서는 괜찮을 것입니다). 가방에서 작업 한 다음 가방을 출력하기를 원할 것입니다 (토플 가방을 평평하게 만들면 출력 행이 표시되어 원하는 출력을 얻습니다).

    확실히 UDF를 작성해야 할 것입니다 (Python 또는 Java에서는 괜찮을 것입니다). 가방에서 작업 한 다음 가방을 출력하기를 원할 것입니다 (토플 가방을 평평하게 만들면 출력 행이 표시되어 원하는 출력을 얻습니다).

    UDF 자체는 그리 어렵지 않을 것입니다 ...

    letter, number = zip(*input_touples)
    number = list(set(number)
    
    for i in range(0,len(number)):
        for j in range(i,len(number)):
            res.append((number[i],number[j]))
    

    그런 다음 물건을 던져 적절하게 반환하십시오.

    간단한 파이썬 UDF를 만드는 데 도움이 필요하면 그렇게 나쁘지 않습니다. 여기를 확인하십시오 : http://pig.apache.org/docs/r0.8.0/udf.html

    물론 여기에서 더 많은 도움을 요청하십시오

  2. from https://stackoverflow.com/questions/3357510/generating-bigram-combinations-from-grouped-data-in-pig by cc-by-sa and MIT license