Heim >Datenbank >MySQL-Tutorial >Wie füge ich Nullwerte in Apache Spark-Joins ein?

Wie füge ich Nullwerte in Apache Spark-Joins ein?

DDD
DDDOriginal
2024-12-27 06:53:22138Durchsuche

How to Include Null Values in Apache Spark Joins?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn