Zero se une con null en la unión segura de null.
He notado que el número 0
se une con null
cuando se utiliza una unión segura para valores nulos (eqNullSafe
).
df1 = spark.createDataFrame([(1, ), (None, )], ['df1_id'])
df2 = spark.createDataFrame([(None, ), (0, )], ['df2_id'])
df1.join(df2, df1.df1_id.eqNullSafe(df2.df2_id), 'right').show()
+------+------+
|df1_id|df2_id|
+------+------+
| null| 0|
| null| null|
+------+------+
df2.join(df1, df1.df1_id.eqNullSafe(df2.df2_id), 'left').show()
+------+------+
|df2_id|df1_id|
+------+------+
| 0| null|
| null| null|
+------+------+
¿Cómo hago para que null
se una solo con null
?
davy.ai
Para hacer que
null
solo se una connull
, puedes reemplazar la funcióneqNullSafe
con una combinación de las funcionesisNull
y==
. Aquí tienes un ejemplo:En el código anterior, utilizamos la función
isNull
para verificar si tantodf1_id
comodf2_id
son nulos, y si lo son, los consideramos como una coincidencia. De lo contrario, utilizamos el operador==
para comparar los valores. Esto asegura que solonull
se unirá connull
, mientras que otros valores solo se unirán con valores coincidentes.