Heim > Datenbank > MySQL-Tutorial > Wie kann ich Nullwerte bei Apache Spark-Joins beibehalten?

Wie kann ich Nullwerte bei Apache Spark-Joins beibehalten?

DDD
Freigeben: 2024-12-31 17:36:11
Original
254 Leute haben es durchsucht

How Can I Preserve Null Values During Apache Spark Joins?

Beibehalten von Nullwerten in Apache Spark-Joins

Standardmäßig lässt Apache Spark Zeilen mit Nullwerten aus, wenn Joins ausgeführt werden. Um diese Werte in die Join-Ausgabe einzubeziehen, bietet Spark mehrere Optionen.

NULL-Safe-Gleichheitsoperator (<=>)

Spark 1.6 führte einen speziellen NULL-Wert ein -sicherer Gleichheitsoperator, der es Ihnen ermöglicht, Nullwerte in Ihren Join aufzunehmen Kriterien.

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))
Nach dem Login kopieren

Column.eqNullSafe (PySpark 2.3.0)

In PySpark 2.3.0 und höher können Sie Column.eqNullSafe verwenden, um NULL- sichere Gleichheit prüft.

numbers_df = sc.parallelize([
    ("123", ), ("456", ), (None, ), ("", )
]).toDF(["numbers"])

letters_df = sc.parallelize([
    ("123", "abc"), ("456", "def"), (None, "zzz"), ("", "hhh")
]).toDF(["numbers", "letters"])

numbers_df.join(letters_df, numbers_df.numbers.eqNullSafe(letters_df.numbers))
Nach dem Login kopieren

%<=>% (SparkR)

SparkR bietet einen %<=>%-Operator für NULL-sichere Gleichheitsprüfungen .

numbers_df <- createDataFrame(data.frame(numbers = c("123", "456", NA, "")))
letters_df <- createDataFrame(data.frame(
  numbers = c("123", "456", NA, ""),
  letters = c("abc", "def", "zzz", "hhh")
))

head(join(numbers_df, letters_df, numbers_df$numbers %<=>% letters_df$numbers))
Nach dem Login kopieren

IST NICHT UNTERSCHIEDLICH VON (SQL)

In SQL (Spark 2.2.0) können Sie IS NOT DISTINCT FROM verwenden, um Nullwerte in Joins beizubehalten.

SELECT * FROM numbers JOIN letters 
ON numbers.numbers IS NOT DISTINCT FROM letters.numbers
Nach dem Login kopieren

Dieser Operator kann auch verwendet werden mit der DataFrame-API:

numbersDf.alias("numbers")
  .join(lettersDf.alias("letters"))
  .where("numbers.numbers IS NOT DISTINCT FROM letters.numbers")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Nullwerte bei Apache Spark-Joins beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage