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()
几乎是唯一的选择。直觉上,除非您在一台机器上收集给定值的所有可能重复项,否则您不能说输入是否不止一次出现。
根据您的管道,您可以分摊此成本。例如,如果您计划稍后 join
或 groupBy
您的数据,那么您可以将其与重复删除相结合。
如果您可以接受数据丢失和启动多个任务的成本,那么您可以逐个分区地使用布隆过滤器。
我是 Spark 的新手,所以请原谅我的无知 :)。对于以下两个键值对:
dataset = sc.parallelize([
("a1", "b1"),
("b1", "a1"),
])
有没有一种高效简单的方法来提取独特的元素?即只提取
("a1", "b1")
例如。 我想 distinct() 可能会完成这项工作,但由于它涉及洗牌,因此对于大型 Hadoop 文件来说,它的性能成本应该相当高。提前致谢!
如果你想要一个准确的结果,那么一些变体:
dataset.map(lambda x: tuple(sorted(x))).distinct()
几乎是唯一的选择。直觉上,除非您在一台机器上收集给定值的所有可能重复项,否则您不能说输入是否不止一次出现。
根据您的管道,您可以分摊此成本。例如,如果您计划稍后 join
或 groupBy
您的数据,那么您可以将其与重复删除相结合。
如果您可以接受数据丢失和启动多个任务的成本,那么您可以逐个分区地使用布隆过滤器。