擅长:python、mysql、java
<p>事实上,在没有文档的情况下,很容易找到这一点。对于这些函数中的任何一个,只需创建一个RDD并调用调试字符串,下面是一个示例,您可以自己完成其余的工作。</p>
<pre><code>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)
</code></pre>
<p>所以正如您所看到的,<code>distinct</code>创建了一个shuffle。找出这种方法而不是文档也特别重要,因为在某些情况下,某些函数需要或不需要洗牌。例如,join通常需要一个shuffle,但是如果您连接两个RDD,那么来自同一个RDD的分支spark有时可以省略shuffle。</p>