es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que null solo se una con null, puedes reemplazar la función eqNullSafe con una combinación de las funciones isNull y ==. Aquí tienes un ejemplo:

    df1.join(df2, (df1.df1_id.isNull() & df2.df2_id.isNull()) | (df1.df1_id == df2.df2_id), 'right').show()
    #+------+------+                                                                 
    #|df1_id|df2_id|
    #+------+------+                                                                 
    #|  null|  null|
    #+------+------+
    
    df2.join(df1, (df1.df1_id.isNull() & df2.df2_id.isNull()) | (df1.df1_id == df2.df2_id), 'left').show()
    #+------+------+                                                                 
    #|df2_id|df1_id|
    #+------+------+                                                                 
    #|  null|  null|
    #+------+------+
    

    En el código anterior, utilizamos la función isNull para verificar si tanto df1_id como df2_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 solo null se unirá con null, mientras que otros valores solo se unirán con valores coincidentes.

Comments are closed.