Apache Spark schließt bei Joins standardmäßig keine Zeilen mit Nullwerten ein. Dies kann zu Problemen führen, wenn Sie alle Daten, einschließlich Nullen, beibehalten möchten. In diesem Artikel wird die Lösung für dieses Problem untersucht.
Wenn Sie eine Verknüpfung für zwei DataFrames durchführen, schließt Spark Zeilen mit Nullwerten aus. Betrachten Sie zum Beispiel die folgenden DataFrames:
val numbersDf = Seq( ("123"), ("456"), (null), ("") ).toDF("numbers") val lettersDf = Seq( ("123", "abc"), ("456", "def"), (null, "zzz"), ("", "hhh") ).toDF("numbers", "letters")
Wenn wir einen Join für diese DataFrames durchführen, erhalten wir die folgende Ausgabe:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | | hhh| +-------+-------+
Wie Sie sehen können, ist die Zeile mit Null in der Zahlenspalte wurde aus dem Ergebnis ausgeschlossen.
Spark bietet einen speziellen nullsicheren Gleichheitsoperator zur Verarbeitung von Joins mit Nullwerten:
numbersDf .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers")) .drop(lettersDf("numbers"))
Dieser Operator gibt „true“ zurück, wenn beide Operanden null oder gleich sind. Mit diesem Operator können wir die gewünschte Ausgabe erhalten:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | null| zzz| | | hhh| +-------+-------+
Spark 2.3.0 :
Früher Spark Versionen:
Vor Spark 1.6 erforderten nullsichere Verknüpfungen ein kartesisches Produkt.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullwerten bei Apache Spark-Joins um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!