我很难在 Spark 文档中找到导致随机播放的操作和不会导致随机播放的操作。在这个列表中,哪些会导致洗牌,哪些不会?
映射和过滤器则不然。但是,我不确定其他人的情况。
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)
实际上,无需文档就可以非常容易地找到这一点。对于这些函数中的任何一个,只需创建一个 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
创建随机播放。找出这种方式而不是文档也特别重要,因为在某些情况下,某些功能需要或不需要洗牌。例如,连接通常需要洗牌,但如果您连接两个 RDD,则来自同一个 RDD Spark 的分支有时可以消除洗牌。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)