Maison > base de données > tutoriel mysql > Comment inclure des valeurs nulles dans les jointures Apache Spark ?

Comment inclure des valeurs nulles dans les jointures Apache Spark ?

DDD
Libérer: 2024-12-27 06:53:22
original
129 Les gens l'ont consulté

How to Include Null Values in Apache Spark Joins?

Inclure les valeurs nulles dans Apache Spark Join

Le comportement de jointure par défaut d'Apache Spark exclut les lignes avec des valeurs nulles, ce qui présente un défi pour les utilisateurs qui ont besoin de l'option préservation de ces valeurs. Cet article résout ce problème en expliquant comment inclure des valeurs nulles dans une opération de jointure Apache Spark.

Comportement Spark par défaut

Par défaut, Spark effectue une jointure interne, qui élimine les lignes avec des valeurs nulles dans les colonnes impliquées dans la condition de jointure. Pour illustrer cela, considérons l'exemple suivant :

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

La sortie de joinDf.show() serait la suivante :

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

Comme prévu, la ligne avec une valeur nulle dans la colonne "numbers" denumbersDf est exclue des résultats de jointure.

Y compris Null Values

Spark fournit une solution à ce problème grâce à un opérateur d'égalité de sécurité nulle. En utilisant le code suivant, les valeurs nulles peuvent être incluses dans l'opération de jointure :

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))
Copier après la connexion

Cette opération de jointure modifiée donne le résultat suivant, qui inclut désormais la ligne précédemment exclue avec une valeur nulle :

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

Il est important de noter que cet opérateur d'égalité sans risque doit être utilisé avec précaution dans les versions Spark antérieures à 1.6, car il nécessitait un système cartésien coûteux. produit.

Spark 2.3.0 et versions ultérieures

Dans Spark 2.3.0 et versions ultérieures, la méthode Column.eqNullSafe peut être utilisée dans PySpark, tandis que le %=< L'opérateur ;=>% peut être utilisé dans SparkR pour obtenir le même résultat. De plus, la syntaxe SQL IS NOT DISTINCT FROM peut être utilisée dans Spark 2.2.0 avec l'API DataFrame pour inclure des valeurs nulles dans les opérations de jointure.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal