Bezug zu Spark - Joining 2 PairRDD elementsIn spark Join, tut Tabelle Reihenfolge wie in Schwein?
Wenn ein regelmäßigen in den Schweinen verbinden tun, die letzte Tabelle in der Verknüpfung nicht in dem Speicher gebracht, sondern durch stattdessen gestreamt, so dass, wenn eine kleine Mächtigkeit pro Taste und B große Mächtigkeit hat, ist es wesentlich besser ist zu tun join A, B
als join A by B
, aus performance perspektive (Vermeidung von Verschütten und OOM)
Gibt es ein ähnliches Konzept in Funken? Ich habe keine solche Empfehlung gesehen und frage mich, wie ist das möglich? Die Implementierung sieht mir ziemlich ähnlich wie in Schwein: https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/CoGroupedRDD.scala
Oder fehlt mir etwas?
ok, aber nehmen wir an, dass wir keine RDD zwischenspeichern. Ich nehme an, dass Spark eine Art Nested-Loops zwischen den 2 RDDs macht. Wenn A 1M Datensätze pro Join-Schlüssel hat und B nur 3 Datensätze pro Join-Schlüssel, aber beide sind riesig. Wenn die äußere (linke) Tabelle A ist, wird jeder Join-Schlüssel zu Überlauf auf die Festplatte führen ... richtig? – ihadanny
@ihadanny, wenn Sie sich die [Quelle] (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/PairRDDFunctions.scala#L503) ansehen Alles ist ein Iterator, also wird nichts notwendigerweise in den Speicher geladen. Wenn ein Iterator erschöpft ist, würde er einfach von Anfang an beginnen, da er so aussieht, als würde die for-Schleife die Ausgabe im Speicher belassen – aaronman