【发布时间】:2016-08-02 08:18:27
【问题描述】:
因此,我尝试根据此 stackoverflow 帖子测试导致改组的 Spark 操作:LINK。但是,当 cartesian 操作不会导致 Spark 中的洗牌时,这对我来说没有任何意义,因为它们需要通过网络移动分区以便在本地将它们放在一起。
Spark 如何在幕后实际执行其cartesian 和distinct 操作??
【问题讨论】:
标签: apache-spark pyspark rdd concept
因此,我尝试根据此 stackoverflow 帖子测试导致改组的 Spark 操作:LINK。但是,当 cartesian 操作不会导致 Spark 中的洗牌时,这对我来说没有任何意义,因为它们需要通过网络移动分区以便在本地将它们放在一起。
Spark 如何在幕后实际执行其cartesian 和distinct 操作??
【问题讨论】:
标签: apache-spark pyspark rdd concept
Shuffle 是一种特定于键值对 RDD(RDD[(T, U)] 通常描述为 PairRDDs 或 PairwiseRDDs)的操作,或多或少等同于 Hadoop 中的 shuffle 阶段。 shuffle 的一个目标是根据键值和Partitioner 将数据移动到特定的执行器。
Spark 中有不同类型的操作,它们需要网络流量,但不要使用与 shuffle 相同类型的逻辑,并且并不总是需要键值对。笛卡尔积是这些操作之一。它在机器之间移动数据(实际上它会导致更昂贵的数据移动),但不会在键和执行器之间建立关系。
【讨论】:
cartesian 实际上是一项基于其数据移动的昂贵操作。因此,我们最好知道还有哪些其他操作有这种行为,以便我们避免。
mapPartitions 表示(map、filter 等),则不需要数据移动。否则它可能会以其他方式移动数据。