Maison >base de données >tutoriel mysql >Comment puis-je conserver les valeurs nulles lors des jointures Apache Spark ?
Par défaut, Apache Spark omet les lignes avec des valeurs nulles lors de l'exécution de jointures. Pour inclure ces valeurs dans la sortie de jointure, Spark propose plusieurs options.
NULL-Safe Equality Operator (<=>)
Spark 1.6 a introduit un NULL spécial -opérateur d'égalité sûr qui vous permet d'inclure des valeurs nulles dans votre jointure critères.
numbersDf .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers")) .drop(lettersDf("numbers"))
Column.eqNullSafe (PySpark 2.3.0)
Dans PySpark 2.3.0 et versions ultérieures, vous pouvez utiliser Column.eqNullSafe pour effectuer NULL- égalité sûre contrôles.
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))
%<=>% (SparkR)
SparkR propose un opérateur %<=>% pour les contrôles d'égalité sécurisés par NULL .
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))
N'EST PAS DISTINCTE DE (SQL)
Dans SQL (Spark 2.2.0), vous pouvez utiliser IS NOT DISTINCT FROM pour conserver les valeurs nulles dans les jointures.
SELECT * FROM numbers JOIN letters ON numbers.numbers IS NOT DISTINCT FROM letters.numbers
Cet opérateur peut également être utilisé avec l'API DataFrame :
numbersDf.alias("numbers") .join(lettersDf.alias("letters")) .where("numbers.numbers IS NOT DISTINCT FROM letters.numbers")
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!