Betrachten Sie, ich habe eine PairedRDD von, sagen wir 10 Partitionen. Aber die Tasten sind nicht gleichmäßig verteilt, das heißt, alle 9 Partitionen mit Daten zu einem einzigen Schlüssel gehört sagen a
und der Rest der Tasten sagen b,c
gibt es in den letzten Partition only.This wird durch die Abbildung unten dargestellt: Speichert Funke alle Elemente einer RDD [K, V] für einen bestimmten Schlüssel in einer einzelnen Partition nach "groupByKey", auch wenn die Daten für einen Schlüssel sehr groß sind?
Nun, wenn ich eine groupByKey
auf dieser rdd
mache, von meinem Verständnis alle Daten für den gleichen Schlüssel werden schließlich zu verschiedenen Partitionen gehen oder keine Daten für den gleichen Schlüssel wird nicht in mehreren Partitionen sein. Bitte korrigieren Sie mich, wenn ich falsch liege.
Wenn das der Fall ist, kann es eine Chance geben, dass die Partition für Schlüssel a
von Größe sein kann, die nicht in einem RAM des Arbeiters passen kann. In welchem Fall wird der Funke funktionieren? Meine Annahme ist so, als würden die Daten auf die Festplatte des Arbeiters gelangen. Ist das richtig? Oder wie Funkengriff solche Situationen
Ich aktualisierte die Antwort. Sie können auch https://github.com/awesome-spark/spark-gotchas/blob/master/04_rdd_actions_and_transformations_by_example.md#be-smart-about-groupbykey (Disclaimer: Ich bin Co-Autor) überprüfen. – zero323
okay. Irgendwelche nützlichen Links haben Sie darüber –
Eine Sache noch: Erstens werden ganze Daten für einen bestimmten Schlüssel zu einer einzelnen Partition in einem einzelnen Worker-Knoten gelangen, dann wird als zweiter Schritt lokale Gruppierung zur Bildung von RDD [k, Iterable (v) ]. Recht?gibt es eine Chance, es im ersten Schritt aufgrund unzureichender lokaler Speicher fehlzuschlagen –