2014-04-21 7 views

Antwort

3

Ja, gibt es. Werfen Sie einen Blick auf die DStream APIs und sie haben Links sowie rechts äußere Verbindungen zur Verfügung gestellt.

Wenn Sie einen Stream von der Art haben wir sagen, ‚Record‘, und Sie möchten zwei Ströme von Datensätzen verbinden, dann können Sie dies tun, wie:

var res: DStream[(Long, (Record, Option[Record]))] = left.leftOuterJoin(right) 

Da die APIs sagen, die linke und Rechte Streams müssen Hash-partitioniert sein. das heißt, Sie können einige Attribute aus einem Datensatz übernehmen (oder auf andere Weise), um einen Hash-Wert zu berechnen und ihn in DStream zu konvertieren. left und right Streams werden vom Typ DStream[(Long, Record)] sein, bevor Sie diese Join-Funktion aufrufen. (Es ist nur ein Beispiel. Der Hash-Typ kann von einem anderen Typ sein als .)

+0

danke..es wird hilfreich sein, wenn Sie ein Codebeispiel geben könnten ... – user3279189

5

Es als rdd1.leftOuterJoin(rdd2) so einfach ist, aber Sie müssen sicherstellen, dass beide rdd die in Form von (Schlüssel, Wert) für jedes Element die RDDs.

0

Spark-SQL/Data Frame API unterstützt auch Links/Rechts/FULL Außen schließt sich direkt an:

https://spark.apache.org/docs/latest/sql-programming-guide.html

Aufgrund dieses Fehlers: https://issues.apache.org/jira/browse/SPARK-11111 Outer-Joins in Funken vor 1.6 kann sehr langsam sein (es sei denn, Sie haben wirklich kleine Datensätze zu verbinden). Früher verwendete es kartesische Produkte und filterte dann vor 1.6. Jetzt verwendet es stattdessen SortMergeJoin.

Verwandte Themen