web-dev-qa-db-de.com

Was sind die Spark-Transformationen, die ein Shuffle verursachen?

Ich habe Probleme, in der Spark-Dokumentation Operationen zu finden, die ein Shuffle verursachen, und Operationen, die dies nicht tun. Welche verursachen in dieser Liste ein Shuffle und welche nicht?

Karte und Filter nicht. Bei den anderen bin ich mir jedoch nicht sicher.

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)
31
poiuytrez

Es ist tatsächlich sehr einfach, dies ohne die Dokumentation herauszufinden. Erstellen Sie für jede dieser Funktionen einfach eine RDD und rufen Sie den Debug-String auf. Ein Beispiel können Sie für den Rest selbst tun. 

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)

Wie Sie sehen, erzeugt distinct einen Shuffle. Es ist auch besonders wichtig, dies auf diese Weise herauszufinden und nicht in Dokumenten, da es Situationen gibt, in denen ein Shuffle für eine bestimmte Funktion erforderlich ist oder nicht. Zum Beispiel erfordert join normalerweise ein Shuffle, aber wenn Sie zwei RDDs verbinden, kann dieser Zweig aus demselben RDD-Funken manchmal den Shuffle ausgleichen.

35
aaronman

Hier ist eine Liste der Operationen, die might einen Shuffle verursachen:

cogroup

groupWith

join : Hash-Partition

leftOuterJoin : Hash-Partition

rightOuterJoin : Hash-Partition

groupByKey : Hash-Partition

reduceByKey : Hash-Partition

combineByKey : Hash-Partition

sortByKey : Bereichspartition

distinct

intersection : Hash-Partition

repartition

coalesce

Quelle: Big Data-Analyse mit Spark und Scala , Optimieren mit Partitionen, Coursera

8
ruhong

Dies kann hilfreich sein: https://spark.Apache.org/docs/latest/programming-guide.html#shuffle-operations

oder dies: http://www.slideshare.net/SparkSummit/dev-ops-training , beginnend mit der Folie 208

von Folie 209: "Transformationen, bei denen" numPartitions "wie" different "verwendet wird, mischen wahrscheinlich"

3
Glenn Strycker

Hier ist die verallgemeinerte Aussage über Shuffling-Transformationen.

Zu den Transformationen, die eine Shuffle verursachen können, gehören repartition operations Wie repartition und coalesce, 'ByKey operations (außer zum Zählen) Wie groupByKey und reduceByKey und join Operationen wie cogroup und join.

Quelle

1
mrsrinivas