2015-10-27 36 views
0

我對Spark很新,所以請原諒我的無知:)。對於以下兩個鍵值對:PySpark中唯一的鍵值對

dataset = sc.parallelize([ 
      ("a1", "b1"), 
      ("b1", "a1"), 
      ]) 

是否有一種高效且簡單的方法來提取獨特元素?也就是說,只提取

("a1", "b1") 

例如。 我認爲distinct()可能會完成這項工作,但由於它涉及混洗,因此對於大型Hadoop文件而言,性能應該會相當高昂。提前致謝!

回答

1

如果你想要一個確切的結果,那麼一些變種:

dataset.map(lambda x: tuple(sorted(x))).distinct() 

幾乎是唯一的選擇。直觀地說,除非您在一臺機器上收集給定值的所有可能重複項,否則不能說出入多次。

根據您的管道,您可以分攤此成本。例如,如果您計劃在以後使用joingroupBy您的數據,則可以將此項與重複項刪除結合使用。

如果您可以接受數據丟失和啓動多個任務的開銷,那麼您可以按分區使用布隆過濾器分區。