Spark SQL führt eine Carthesian-Join statt einer Inner Join durch

8

Ich versuche, zwei Datenrahmen miteinander zu verbinden, nachdem ich einige frühere Berechnungen durchgeführt habe. Der Befehl ist einfach:

%Vor%

Der Join scheint jedoch einen Carthesian-Join auszuführen, wobei er meine ===-Anweisung vollständig ignoriert. Hat jemand eine Idee, warum passiert das?

    
NNamed 24.08.2015, 20:06
quelle

1 Antwort

22

Ich glaube, ich habe mit dem gleichen Thema gekämpft. Überprüfen Sie, ob Sie eine Warnung haben:

%Vor%

Nach dem Erstellen der Join-Operation. Wenn dies der Fall ist, aliasieren Sie einfach eine der Spalten in einem Mitarbeiter- oder Arbeitgeber-Datenrahmen, z. so:

%Vor%

Führen Sie dann die Verknüpfung für employee("id_e") === employer("id") aus.

Erklärung. Schau dir diesen Ablauf an:

Wenn Sie DataFrame A direkt zum Berechnen von DataFrame B verwenden und sie in der Spalten-ID zusammenführen, die aus dem Datenrahmen A stammt, führen Sie die gewünschte Verknüpfung nicht aus. Die ID-Spalte von DataFrameB ist tatsächlich die exakt gleiche Spalte von DataFrameA, also wird Spark nur bestätigen, dass die Spalte mit sich selbst übereinstimmt und daher das trivial wahre Prädikat.  Um dies zu vermeiden, müssen Sie eine der Spalten aliasieren, damit sie als "verschiedene" Spalten für spark erscheinen. Bisher wurde nur die Warnmeldung auf diese Weise implementiert:

%Vor%

Es ist keine sehr gute Lösung für mich (es ist wirklich leicht, die Warnmeldung zu verpassen), ich hoffe, dass dies irgendwie behoben wird.

Sie haben jedoch das Glück, die Warnmeldung es wurde vor nicht so langer Zeit hinzugefügt ;).

    
Niemand 24.08.2015, 20:33
quelle