我对Spark很新,所以请原谅我的无知:)。对于以下两个键值对:
dataset = sc.parallelize([
("a1", "b1"),
("b1", "a1"),
])
有一种提取独特元素的有效而简单的方法吗?也就是说,只提取
("a1", "b1")
例如,。 我猜distinct()可能会完成这项工作,但由于它涉及改组,因此对于大型Hadoop文件来说,性能应该相当高。提前谢谢!
答案 0 :(得分:2)
如果您想要一个确切的结果,那么有一些变体:
dataset.map(lambda x: tuple(sorted(x))).distinct()
几乎是唯一的选择。直观地说,除非你在一台机器上收集给定值的所有可能的重复项,否则你不能说输入是否多次出现。
根据您的管道,您可以分摊此费用。例如,如果您以后计划join
或groupBy
您的数据,则可以将其与重复项删除相结合。
如果您可以接受数据丢失和启动多个任务的成本,那么您可以按分区使用bloom filter partition。