PySpark中的唯一键值对

时间:2015-10-27 11:14:18

标签: apache-spark pyspark rdd

我对Spark很新,所以请原谅我的无知:)。对于以下两个键值对:

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

有一种提取独特元素的有效而简单的方法吗?也就是说,只提取

 ("a1", "b1")
例如,

。 我猜distinct()可能会完成这项工作,但由于它涉及改组,因此对于大型Hadoop文件来说,性能应该相当高。提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果您想要一个确切的结果,那么有一些变体:

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

几乎是唯一的选择。直观地说,除非你在一台机器上收集给定值的所有可能的重复项,否则你不能说输入是否多次出现。

根据您的管道,您可以分摊此费用。例如,如果您以后计划joingroupBy您的数据,则可以将其与重复项删除相结合。

如果您可以接受数据丢失和启动多个任务的成本,那么您可以按分区使用bloom filter partition。