Wie join über mehrere Spalten in Pyspark?
Bin ich mit Spark 1.3 und würde gerne mitmachen auf mehreren Spalten über die python-Schnittstelle (SparkSQL)
Folgende Werke:
Ich zunächst registrieren Sie als temporäre Tabellen.
numeric.registerTempTable("numeric")
Ref.registerTempTable("Ref")
test = numeric.join(Ref, numeric.ID == Ref.ID, joinType='inner')
Ich würde nun gerne beitreten Sie basiert auf mehreren Säulen.
Bekomme ich SyntaxError
: ungültige syntax mit dieser:
test = numeric.join(Ref,
numeric.ID == Ref.ID AND numeric.TYPE == Ref.TYPE AND
numeric.STATUS == Ref.STATUS , joinType='inner')
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden
&
/|
Betreiber und vorsichtig sein, über operator-Rangfolge (==
eine niedrigere Priorität als das bitweiseAND
undOR
):Ein alternativer Ansatz wäre:
welche Ausgänge:
Mit den wesentlichen Vorteil, dass die Spalten, über die die Tabellen verknüpft sind nicht dupliziert in der Ausgabe, die Verringerung der Gefahr von auftreten von Fehlern wie
org.apache.spark.sql.AnalysisException: Reference 'x1' is ambiguous, could be: x1#50L, x1#57L.
Wenn die Spalten in den beiden Tabellen haben unterschiedliche Namen, (sagen wir mal in dem Beispiel oben
df2
hat die Spalteny1
,y2
undy4
), könnten Sie die folgende syntax verwenden: