Ich glaube, ich habe mit dem gleichen Problem gekämpft. Überprüfen Sie, ob Sie eine Warnung haben:
Constructing trivially true equals predicate [..]
Nach dem Erstellen der Join-Operation. Wenn dies der Fall ist, aliasieren Sie einfach eine der Spalten in einem Mitarbeiter- oder Arbeitgeber-Datenrahmen, z. dies wie:
employee.select(<columns you want>, employee("id").as("id_e"))
Führen Sie dann auf employee("id_e") === employer("id")
beizutreten.
Erläuterung. Schauen Sie sich den Betriebsablauf:
Wenn Sie direkt Datenrahmen B Ihren Datenrahmen A verwenden zu berechnen und sie zusammen auf der Spalte Id verbinden, die aus dem Datenrahmen A kommt, werden Sie nicht der Durchführung werden beitreten wollen Sie tun. 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. Vorerst nur die Warnmeldung auf diese Weise wurde implementiert:
def === (other: Any): Column = {
val right = lit(other).expr
if (this.expr == right) {
logWarning(
s"Constructing trivially true equals predicate, '${this.expr} = $right'. " +
"Perhaps you need to use aliases.")
}
EqualTo(expr, right)
}
Es ist nicht eine sehr gute Lösung Lösung für mich (es ist wirklich einfach, um die Warnmeldung zu verpassen), ich hoffe, das wird irgendwie fixiert werden.
Sie haben Glück, die Warnmeldung zu sehen, it has been added not so long ago;).
Willkommen bei SO NNamed. Wenn Sie um Hilfe bitten, sollten Sie uns eine Chance geben :) Ein guter Anfang ist, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereitzustellen. – zero323