Maison >base de données >tutoriel mysql >Comment gérer les valeurs nulles lors des jointures Apache Spark ?

Comment gérer les valeurs nulles lors des jointures Apache Spark ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-01 10:33:12529parcourir

How to Handle Null Values During Apache Spark Joins?

Comment inclure des valeurs nulles dans une jointure Apache Spark

Apache Spark n'inclut pas de lignes avec des valeurs nulles par défaut lors des jointures. Cela peut entraîner des problèmes lorsque vous souhaitez conserver toutes les données, y compris les valeurs NULL. Cet article explore la solution à ce problème.

Comportement Spark par défaut

Lorsque vous effectuez une jointure sur deux DataFrames, Spark exclura les lignes avec des valeurs nulles. Par exemple, considérons les DataFrames suivants :

val numbersDf = Seq(
  ("123"),
  ("456"),
  (null),
  ("")
).toDF("numbers")

val lettersDf = Seq(
  ("123", "abc"),
  ("456", "def"),
  (null, "zzz"),
  ("", "hhh")
).toDF("numbers", "letters")

Si nous effectuons une jointure sur ces DataFrames, nous obtiendrons le résultat suivant :

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
+-------+-------+

Comme vous pouvez le voir, la ligne avec null dans la colonne des nombres a été exclu du résultat.

Solution

Spark fournit un opérateur d'égalité spécial de sécurité nulle pour gérer les jointures avec des valeurs nulles :

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))

Cet opérateur retournera vrai si les deux opérandes sont nuls ou s'ils sont égaux. En utilisant cet opérateur, nous pouvons obtenir le résultat souhaité :

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|   null|    zzz|
|       |    hhh|
+-------+-------+

Options supplémentaires

Spark 2.3.0 :

  • PySpark : Utiliser Column.eqNullSafe
  • SparkR : Utiliser %<=>%
  • SQL : L'utilisation N'EST PAS DISTINCTE DE

Étincelle antérieure Versions :

Avant Spark 1.6, les jointures Null-Safe nécessitaient un produit cartésien.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn