Einschließen von Nullwerten in Apache Spark Join
Das standardmäßige Join-Verhalten von Apache Spark schließt Zeilen mit Nullwerten aus, was eine Herausforderung für Benutzer darstellt, die dies benötigen Bewahrung solcher Werte. In diesem Artikel wird dieses Problem behoben, indem erläutert wird, wie Nullwerte in einen Apache Spark-Join-Vorgang einbezogen werden.
Standardverhalten von Spark
Standardmäßig führt Spark einen Inner Join durch Eliminiert Zeilen mit Nullwerten in jeder Spalte, die an der Join-Bedingung beteiligt ist. Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel:
val numbersDf = Seq( ("123"), ("456"), (null), ("") ).toDF("numbers") val lettersDf = Seq( ("123", "abc"), ("456", "def"), (null, "zzz"), ("", "hhh") ).toDF("numbers", "letters") val joinedDf = numbersDf.join(lettersDf, Seq("numbers"))
Die Ausgabe von joinDf.show() wäre wie folgt:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | | hhh| +-------+-------+
Erwartungsgemäß die Zeile mit einem Nullwert in Die Spalte „Zahlen“ von zahlenDf ist von den Join-Ergebnissen ausgeschlossen.
Einschließlich Null Werte
Spark bietet eine Lösung für dieses Problem durch einen nullsicheren Gleichheitsoperator. Mithilfe des folgenden Codes können die Nullwerte in die Join-Operation einbezogen werden:
numbersDf .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers")) .drop(lettersDf("numbers"))
Diese modifizierte Join-Operation führt zu der folgenden Ausgabe, die nun die zuvor ausgeschlossene Zeile mit Nullwert enthält:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | null| zzz| | | hhh| +-------+-------+
Es ist wichtig zu beachten, dass dieser nullsichere Gleichheitsoperator in Spark-Versionen vor 1.6 vorsichtig verwendet werden sollte, da er einen kostspieligen kartesischen Operator erforderte Produkt.
Spark 2.3.0 und höher
In Spark 2.3.0 und höher kann die Column.eqNullSafe-Methode in PySpark verwendet werden, während %=< Der Operator ;=>% kann in SparkR verwendet werden, um das gleiche Ergebnis zu erzielen. Darüber hinaus kann die SQL-Syntax IS NOT DISTINCT FROM in Spark 2.2.0 zusammen mit der DataFrame-API verwendet werden, um Nullwerte in Join-Vorgänge einzubeziehen.
Das obige ist der detaillierte Inhalt vonWie füge ich Nullwerte in Apache Spark-Joins ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!