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
Libérer: 2025-01-01 10:33:12
original
510 Les gens l'ont consulté

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")
Copier après la connexion

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

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
+-------+-------+
Copier après la connexion

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"))
Copier après la connexion

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|
+-------+-------+
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal