Ausgabe
Ich habe 2 RDDs. Das erste RDD ist das Original-RDD und das zweite ist ein RDD, das ich aus dem Original herausgefiltert und einige Prozesse darauf ausgeführt habe. Nachdem ich Prozesse durchgeführt habe, möchte ich ihnen beitreten. Das ursprüngliche RDD sieht wie folgt aus:
(1,5)
(2,60)
(3,7)
(4,1)
(5,1)
...
(10,8)
und das gefilterte und manipulierte RDD ist:
(4,3)
(5,10)
(6,6)
(7,9)
wie soll ich mich ihnen anschließen?? Wenn ich fullouterjoin oder andere Join-Methoden verwende, gibt es einen Fehler
Bearbeitet
Ich habe Code geschrieben, wie Sie sagten, wie folgt:
original_RDD=original_RDD.fullOuterJoin(new_RDD).foreach { case (joinKey, (oldOption, newOption)) =>
newOption match {
case None => (joinKey,oldOption)
case Some(newOption) => (joinKey,newOption)
}
}
aber ich bekomme diesen Fehler:
Error:(232, 55) type mismatch;
found : Unit
required: org.apache.spark.rdd.RDD[(Long, Int)]
nodes=nodes.fullOuterJoin(joined_new).foreach { case (joinKey, (oldOption, newOption)) =>
Lösung
Siehe Join-Syntax
Gibt beim Aufruf von Datensätzen des Typs (K, V) und (K, W) einen Datensatz von (K, (V, W))-Paaren mit allen Paaren von Elementen für jeden Schlüssel zurück. Äußere Verknüpfungen werden durch leftOuterJoin, rightOuterJoin und fullOuterJoin unterstützt.
originalRdd
.fullOuterJoin(joinRdd)
.foreach { case (joinKey, (oldOption, newOption)) =>
newOption match {
case None => println("new value is None")
case Some(joinValue) => println(s"new value = $joinValue")
}
}
Beantwortet von – User9123
Antwort geprüft von – Timothy Miller (FixError Admin)