PySpark 中唯一的键值对

unique key-value pairs in PySpark

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

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

有没有一种高效简单的方法来提取独特的元素?即只提取

 ("a1", "b1")

例如。 我想 distinct() 可能会完成这项工作,但由于它涉及洗牌,因此对于大型 Hadoop 文件来说,它的性能成本应该相当高。提前致谢!

如果你想要一个准确的结果,那么一些变体:

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

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

根据您的管道,您可以分摊此成本。例如,如果您计划稍后 joingroupBy 您的数据,那么您可以将其与重复删除相结合。

如果您可以接受数据丢失和启动多个任务的成本,那么您可以逐个分区地使用布隆过滤器。