2016-08-01 11 views
2

Also habe ich versucht, auf Spark-Operationen zu testen, die Shuffling basierend auf diesem Stack-Overflow-Post verursachen: LINK. Es macht jedoch keinen Sinn für mich, wenn die Operation cartesian kein Mischen in Spark verursacht, da sie die Partitionen über das Netzwerk verschieben müssen, um sie lokal zusammenzufügen.Spark Cartesian verursacht keine Shuffle?

Wie macht Spark tatsächlich seine cartesian und distinct Operationen hinter der Szene?

Antwort

2

Shuffle ist eine Operation, die RDDs von Schlüssel/Wert-Paaren (RDD[(T, U)] allgemein PairRDDs oder PairwiseRDDs) entspricht und mehr oder weniger der Shuffle-Phase in Hadoop entspricht. Ein Ziel von shuffle ist das Verschieben von Daten auf einen bestimmten Executor basierend auf dem Schlüsselwert und Partitioner.

Es gibt verschiedene Arten von Operationen in Spark, die Netzwerkverkehr erfordern, aber nicht dieselbe Art von Logik wie Shuffle verwenden und nicht immer Schlüssel/Wert-Paare erfordern. Kartesisches Produkt ist einer dieser Vorgänge. Es bewegt Daten zwischen Maschinen (in der Tat verursacht es viel teurere Datenbewegungen), aber stellt keine Beziehung zwischen Schlüsseln und Ausführern her.

+0

Woher weiß ich also, welche Operationen den Netzwerkverkehr in Spark benötigen? Wie Sie bereits erwähnt haben, ist "Kartesisch" auf Grund seiner Datenbewegungen eine teure Operation. Daher wäre es für uns besser zu wissen, welche anderen Operationen dieses Verhalten haben, damit wir es vermeiden können. – Tim

+1

Wenn Operationen nur durch 'mapPartitions' (' map', 'filter' usw.) ausgedrückt werden, ist keine Datenverschiebung erforderlich. Andernfalls verschiebt es Daten möglicherweise auf andere Weise. – zero323

+1

mehr Infos von offiziellen Funken docs http://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations – DanielVL