【问题标题】:Spark cartesian doesn't cause shuffle?火花笛卡尔不会导致洗牌?
【发布时间】:2016-08-02 08:18:27
【问题描述】:

因此,我尝试根据此 stackoverflow 帖子测试导致改组的 Spark 操作:LINK。但是,当 cartesian 操作不会导致 Spark 中的洗牌时,这对我来说没有任何意义,因为它们需要通过网络移动分区以便在本地将它们放在一起。

Spark 如何在幕后实际执行其cartesiandistinct 操作??

【问题讨论】:

    标签: apache-spark pyspark rdd concept


    【解决方案1】:

    Shuffle 是一种特定于键值对 RDD(RDD[(T, U)] 通常描述为 PairRDDsPairwiseRDDs)的操作,或多或少等同于 Hadoop 中的 shuffle 阶段。 shuffle 的一个目标是根据键值和Partitioner 将数据移动到特定的执行器。

    Spark 中有不同类型的操作,它们需要网络流量,但不要使用与 shuffle 相同类型的逻辑,并且并不总是需要键值对。笛卡尔积是这些操作之一。它在机器之间移动数据(实际上它会导致更昂贵的数据移动),但不会在键和执行器之间建立关系。

    【讨论】:

    • 那么,我如何知道 Spark 中哪些操作需要网络流量?正如您所提到的,cartesian 实际上是一项基于其数据移动的昂贵操作。因此,我们最好知道还有哪些其他操作有这种行为,以便我们避免。
    • 如果操作仅由mapPartitions 表示(mapfilter 等),则不需要数据移动。否则它可能会以其他方式移动数据。
    • 更多信息来自官方 spark 文档spark.apache.org/docs/latest/…
    • @DanielVL 他们只谈论洗牌操作。该文档没有提到任何其他网络流量样式,如前面提到的。我很难找到这方面的信息。
    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多