복붙노트

[HADOOP] 별개의 커플 (쌍)을 필터링하는 방법

HADOOP

별개의 커플 (쌍)을 필터링하는 방법

나는 돼지를 처음 사용합니다. 두 요소 사이에서 탭으로 구분 된 쌍을 생성하는 Pig 스크립트가 있습니다. 예를 들어, 한 줄에 한 쌍씩 :

John   Paul
Tom    Nik
Mark   Bill
Tom    Nik
Paul   John

중복 조합을 필터링해야합니다. DISTINCT를 사용하면 이중 "Tom Nik"항목을 필터링합니다. 결과는 다음과 같습니다.

John   Paul
Tom    Nik
Mark   Bill
Paul   John

이 접근 방식의 문제점은 내가 "John Paul"과 "Paul John"둘 다 남겨두고 내 목적에 따라 동일하게 처리해야한다는 것입니다. 순열 조합을 제거하는 방법이 있습니까?

해결법

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

    1.Pig에서 문자열 비교가 어떻게 구현되는지 잘 모르겠지만 다음과 같이 시도해 보는 것이 좋습니다.

    Pig에서 문자열 비교가 어떻게 구현되는지 잘 모르겠지만 다음과 같이 시도해 보는 것이 좋습니다.

    -- A is your input
    B = FOREACH A GENERATE FLATTEN(($0 < $1 ? ($0, $1) : ($1, $0))) ; 
    C = DISTINCT B ;
    

    '더 작은'이 항상 먼저 나타나도록 이름을 정렬하면 John Paul과 Paul John의 순서가 모두 같아야 DISTINCT가 제거됩니다.

    그러나이 방법은 모두 문자열 비교가 어떻게 구현되는지에 달려 있습니다. 예를 들어 길이를 비교하면 John Paul 사례가 올바르게 필터링되지 않습니다.

  2. from https://stackoverflow.com/questions/22812857/pig-how-to-filter-distinct-couples-pairs by cc-by-sa and MIT license