from pyspark import SparkContext
sc = SparkContext()
rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3), ('d', 4)], numSlices=8)
rdd2 = rdd1.mapValues(lambda x: x)
Diese RDDs haben die gleiche Aufteilung:PySpark beitreten schlurft Co-partitioniert RDDs
rdd1.keys().glom().collect()
>>> [[], ['a'], [], ['b'], [], ['c'], [], ['d']]
rdd2.keys().glom().collect()
>>> [[], ['a'], [], ['b'], [], ['c'], [], ['d']]
ist es hier mehrere Antworten auf SO, die darauf hinweisen, dass die Zusammenarbeit partitionierten Datenverbindungs keinen Shuffle verursachen, die eine macht Viel Sinn für mich. Beispiel: Does a join of co-partitioned RDDs cause a shuffle in Apache Spark?
Allerdings, wenn ich diese Zusammenarbeit partitioniert RDDs mit PySpark verbinden, werden die Daten in eine neue Partition neu gemischt:
rdd1.join(rdd2).keys().glom().collect()
>>> [['a'], [], ['c'], ['b'], [], ['d'], [], [], [], [], [], [], [], [], [], []]
Und die Aufteilung ändert, selbst wenn ich die Anzahl der neuen Partitionen auf das Original 8:
rdd1.join(rdd2, numPartitions=8).keys().glom().collect()
>>> [['a'], [], ['c'], ['b'], [], ['d'], [], []]
Wie kann ich nicht vermeiden, ein Mischen mit diesen co-partitioned RDDs?
Ich benutze Spark 1.6.0.
Danke auch, könnte dies nur das Problem lösen Ich bin vor. Ich bin jedoch überrascht, dass die Einstellungen "numSlices" keine explizite Partitionierung impliziert. (Ich denke jetzt verstehe ich, warum es nicht 'numPartitions' heißt, wie in anderen Funktionen.) –
Wenn wir über Partitionen in Spark sprechen, meinen wir zwei verschiedene Konzepte. Sie können meine Antwort zu http://stackoverflow.com/q/34491219/1560062 für einige Erklärung überprüfen. – zero323