from datetime import *
from pyspark.sql.functions import *
from pyspark.sql.types import *
columns = [ 'id1', 'id2', 'val' ]
ids = [ 'id1', 'id2' ]
vals1 = [
(1, 'a', 1),
(2, 'b', 4),
(4, None, 1),
]
df1 = spark.createDataFrame(data=vals1, schema=columns)
vals2 = [
(1, 'a', 5),
(3, 'c', 2),
(4, None, 2),
]
df2 = spark.createDataFrame(data=vals2, schema=columns)
df1 = df1.withColumnRenamed('val', 'val1')
df2 = df2.withColumnRenamed('val', 'val2')
res_df = df1.join(df2, ids, 'full')
res_df.sort(ids).show()
And the result is
+---+----+----+----+
|id1| id2|val1|val2|
+---+----+----+----+
| 1| a| 1| 5|
| 2| b| 4|null|
| 3| c|null| 2|
| 4|null| 1|null|
| 4|null|null| 2|
+---+----+----+----+
i.e. there are 2 rows with the key [ 4, null ]
Is this behavior normal?