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"))
La sortie de joinDf.show() serait la suivante :
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | | hhh| +-------+-------+
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"))
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| +-------+-------+
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!