引发洗牌的火花变换是什么?

2024-09-30 10:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在Spark文档中,我很难找到导致shuffle的操作和不导致shuffle的操作。在这个列表中,哪些会导致洗牌,哪些不会?

映射和筛选不起作用。但是,我不确定其他人。

map(func)
filter(func)
flatMap(func)
mapPartitions(func)
mapPartitionsWithIndex(func)
sample(withReplacement, fraction, seed)
union(otherdataset)
intersection(otherDataset)
distinct([numTasks]))
groupByKey([numTasks])
reduceByKey(func, [numTasks])
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])
sortByKey([ascending], [numTasks])
join(otherDataset, [numTasks])
cogroup(otherDataset, [numTasks])
cartesian(otherDataset)
pipe(command, [envVars])
coalesce(numPartitions)

Tags: sample文档map列表filtersparkfuncshuffle
3条回答

这可能会有帮助: https://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations

或者这个: http://www.slideshare.net/SparkSummit/dev-ops-training,从幻灯片208开始

从幻灯片209: “使用诸如distinct之类的“numPartitions”的转换可能会洗牌”

事实上,在没有文档的情况下,很容易找到这一点。对于这些函数中的任何一个,只需创建一个RDD并调用调试字符串,下面是一个示例,您可以自己完成其余的工作。

scala> val a  = sc.parallelize(Array(1,2,3)).distinct
scala> a.toDebugString
MappedRDD[5] at distinct at <console>:12 (1 partitions)
  MapPartitionsRDD[4] at distinct at <console>:12 (1 partitions)
    **ShuffledRDD[3] at distinct at <console>:12 (1 partitions)**
      MapPartitionsRDD[2] at distinct at <console>:12 (1 partitions)
        MappedRDD[1] at distinct at <console>:12 (1 partitions)
          ParallelCollectionRDD[0] at parallelize at <console>:12 (1 partitions)

所以正如您所看到的,distinct创建了一个shuffle。找出这种方法而不是文档也特别重要,因为在某些情况下,某些函数需要或不需要洗牌。例如,join通常需要一个shuffle,但是如果您连接两个RDD,那么来自同一个RDD的分支spark有时可以省略shuffle。

下面是一个操作列表,可能会导致洗牌:

^{}

^{}

^{}:哈希分区

^{}:哈希分区

^{}:哈希分区

^{}:哈希分区

^{}:哈希分区

^{}:哈希分区

^{}:范围分区

^{}

^{}:哈希分区

^{}

^{}

来源:Big Data Analysis with Spark and Scala,用分区优化,Coursera

相关问题 更多 >

    热门问题