Ich dachte, ich wüsste, dass SQL-Joins, aber jetzt bin ich mir nicht so sicher. Ich habe einen Datenrahmen mit Filmbewertungen und einen anderen Datenrahmen mit userIds und deren Indizes. Ich möchte beiden Datenrahmen beitreten, so dass ich den entsprechenden Benutzerindex für jede Filmbewertung habe. Aber nachdem ich mich den Tabellen angeschlossen habe, bekomme ich mehr Datensätze als vor dem Beitritt, was für mich keinen Sinn ergibt. Ich erwarte, die gleiche Anzahl von Datensätzen zu bekommen, aber mit einer zusätzlichen Spalte von u_number: Meine erste Idee war, Links mit ratingsDf als linken und userDataFrame als rechts zu verwenden, aber ich bekomme unerwünschte Ergebnisse mit einem der Joins ich versuchte.Spark (Scala) sqlDataFrame Joins funktioniert nicht wie erwartet
Der Befehl i für die Join verwenden:
val ratingsUsers = ratingsDf.join(userDataFrame, ratingsDf("uid") === userDataFrame("uid"),"left")
Dies sind die Tabellen:
scala> ratingsDf.show(5)
+--------------+----------+------+
| uid| mid|rating|
+--------------+----------+------+
|A1V0C9SDO4DKLA|B0002IQNAG| 4.0|
|A38WAOQVVWOVEY|B0002IQNAG| 4.0|
|A2JP0URFHXP6DO|B0002IQNAG| 5.0|
|A2X4HJ26YWTGJU|B0002IQNAG| 5.0|
|A3A98961GZKIGD|B0002IQNAG| 5.0|
+--------------+----------+------+
scala> userDataFrame.show(5)
+--------------+--------+
| uid|u_number|
+--------------+--------+
|A10049L7AJW9M7| 0|
|A1007G0226CSWC| 1|
|A100FQCUCZO2WG| 2|
|A100JCBNALJFAW| 3|
|A100K3KEMSVSCM| 4|
+--------------+--------+
Dies ist ein typisches Problem mit doppelten Schlüsseln, wie ich weiß. – WoodChopper
Nur klärende @ WoodChopper Punkt - die Verdoppelung im Ergebnis bedeutet wahrscheinlich, dass Sie nicht eindeutige Werte für "UID" in "userDataFrame" haben - wenn diese Spalte eindeutig ist linken Link sollte ein Ergebnis mit der gleichen Größe wie "ratingsDf" –