2014-04-02 58 views
2

我是豬的新手。我有一個Pig腳本,它生成兩個元素之間的製表符分隔對。例如:每行有一對,例如:豬如何過濾不同夫婦(雙)

John Paul 
Tom Nik 
Mark Bill 
Tom Nik 
Paul John 

我需要過濾掉重複組合。如果我使用DISTINCT,則會過濾掉雙「Tom Nik」條目。其結果是:

John Paul 
Tom Nik 
Mark Bill 
Paul John 

這種方法的問題是,我留下兩個「若望保祿」和「約翰保羅」,這對於我的目的應被視爲相同(相同的組合)。 有沒有辦法去除排列組合?

+0

現在你基本上有兩個列表。你真正想把它們當作套裝。嘗試使用這兩個名稱作爲元素創建一個包。一個袋子是無序的。 –

+0

對不起,我沒有解釋清楚。我有2列。第一個可以被$ 0訪問,第二個可以被$ 1訪問。 – user3489477

回答

1

我不知道字符串比較是如何在豬中實現,但它可能是值得嘗試這樣的:

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

通過排序名稱,以便在「小」總是首先出現兩個John PaulPaul John現在應該是相同的順序,使DISTINCT消除一個。

但是,這種方法完全取決於如何實現字符串比較。例如,如果它比較了長度,那麼John Paul的情況將不會被正確過濾。

+0

感謝您的幫助!這是我的問題的完美解決方案! – user3489477