2014-04-02 33 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