在 null-safe 连接中零与 null 连接
Zero joins with null in the null-safe join
我注意到 0
在使用空安全连接 (eqNullSafe
) 时与 null
连接。
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|
#+------+------+
如何让 null
仅与 null
一起加入?
这里需要做内连接
df1.join(df2, df1.df1_id.eqNullSafe(df2.df2_id), 'inner').show()
现在右边的 0 和左边的 df 中没有匹配项,我们正在进行右连接,这就是为什么 pyspark 在右边的 df 中保留 0 并且它在 df1_id
中变为 null。
我注意到 0
在使用空安全连接 (eqNullSafe
) 时与 null
连接。
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|
#+------+------+
如何让 null
仅与 null
一起加入?
这里需要做内连接
df1.join(df2, df1.df1_id.eqNullSafe(df2.df2_id), 'inner').show()
现在右边的 0 和左边的 df 中没有匹配项,我们正在进行右连接,这就是为什么 pyspark 在右边的 df 中保留 0 并且它在 df1_id
中变为 null。