Macht eine Verknüpfung von co-partitioniert RDDs verursachen einen shuffle in Apache Spark?
Wird rdd1.join(rdd2)
Ursache shuffle passieren, wenn rdd1
und rdd2
haben die gleichen Partitionierer?
- Können Sie umschreiben diese Frage, um deutlicher zu sein? Nur weil RDDs Partitionen auf derselben Maschine bedeutet nicht, dass alle Tasten immer auf der gleichen partition über beide. Was fragst du dann?
- Ich habe umgeschrieben, die Frage vollständig. Ich denke, es macht jetzt Sinn, aber ich bin mir nicht sicher, es ist das, was @zwb gemeint. Ich habe nicht wirklich verstehen, das original. Fühlen Sie sich frei, um wieder meine Bearbeiten und aktualisieren Sie die Frage, falls erforderlich.
- Danke, ich komme aus china und mein Englisch ist schlecht,ich kann nicht, drücke mich sehr klar und deutlich, was Sie umgeschrieben ist mein Gefühl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Wenn zwei RDDs haben die gleichen Partitionierer, der
join
wird nicht zu einem shuffle. Sie können dies inCoGroupedRDD.scala
:Beachten Sie jedoch, dass das fehlen einer shuffle bedeutet nicht, dass keine Daten bewegt werden müssen zwischen den Knoten. Es ist möglich für zwei RDDs haben die gleichen Partitionierer (co-partitioniert) noch die entsprechenden Partitionen auf verschiedenen Knoten (nicht co-located).
Diese situation ist immer noch besser als ein shuffle, aber es ist etwas im Auge zu behalten. Co-location können die Leistung verbessern, ist aber schwer zu garantieren.
spark.sql.shuffle.partitions
dass es "konfiguriert die Anzahl der Partitionen zu verwenden, wenn das mischen der Daten für joins oder Aggregationen." das ist Also ein gutes Zeichen.