poi*_*rez 35 python java scala apache-spark
我很难在Spark文档操作中找到导致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)
Run Code Online (Sandbox Code Playgroud)
aar*_*man 37
在没有文档的情况下,实际上很容易找到它.对于这些函数中的任何一个,只需创建一个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)
Run Code Online (Sandbox Code Playgroud)
所以你可以看到distinct创造一个洗牌.找出这种方式而不是文档也是特别重要的,因为在某些情况下某些功能需要或不需要随机播放.例如,join通常需要一个shuffle但是如果你加入两个RDD,那么来自同一个RDD spark的分支有时会消除shuffle.
ruh*_*ong 14
以下是可能导致混乱的操作列表:
join:哈希分区
leftOuterJoin:哈希分区
rightOuterJoin:哈希分区
groupByKey:哈希分区
reduceByKey:哈希分区
combineByKey:哈希分区
sortByKey:范围分区
intersection:哈希分区
资料来源:使用Spark和Scala进行大数据分析,使用分区进行优化,Coursera
这可能会有所帮助: https ://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations
或者这个: http: //www.slideshare.net/SparkSummit/dev-ops-training,从幻灯片 208 开始
来自幻灯片 209:“使用 'numPartitions' 的转换(例如,distinct)可能会随机播放”