My objectifs is to join two dataframes, have infomations from both, despite the fact that I can have nulls in my join keys. These are my two dataframes :
val data1 = Seq(
(601, null, null, "8121000868-10", "CN88"),
(3925, null, null, "8121000936-50", "CN88")
)
val df1 = data1.toDF("id", "work_order_number", "work_order_item_number", "tally_number", "company_code")
val data2 = Seq(
(null, null, "8121000868-10", "CN88", "popo"),
(null, null, "8121000936-50", "CN88", "Smith")
)
val df2 = data2.toDF("work_order_number", "work_order_item_number", "tally_number", "company_code", "name")
Actually my objectif is to get the "id" from df1, rename it as "tally_summary_id" and be able to to re-attach some other informations to every single id. This is my code :
val final_df =
df1.select(col("id").alias("tally_summary_id"), col("work_order_number"), col("work_order_item_number"),
col("tally_number"), col("company_code"))
.join(df2, Seq("tally_number", "work_order_number", "work_order_item_number", "company_code"), "full")
A left join give me :
+-------------+-----------------+----------------------+------------+----------------+----+
| tally_number|work_order_number|work_order_item_number|company_code|tally_summary_id|name|
+-------------+-----------------+----------------------+------------+----------------+----+
|8121000868-10| null| null| CN88| 601|null|
|8121000936-50| null| null| CN88| 3925|null|
+-------------+-----------------+----------------------+------------+----------------+----+
A right join give me :
+-------------+-----------------+----------------------+------------+----------------+-----+
| tally_number|work_order_number|work_order_item_number|company_code|tally_summary_id| name|
+-------------+-----------------+----------------------+------------+----------------+-----+
|8121000868-10| null| null| CN88| null| popo|
|8121000936-50| null| null| CN88| null|Smith|
+-------------+-----------------+----------------------+------------+----------------+-----+
A full join give me :
+-------------+-----------------+----------------------+------------+----------------+-----+
| tally_number|work_order_number|work_order_item_number|company_code|tally_summary_id| name|
+-------------+-----------------+----------------------+------------+----------------+-----+
|8121000868-10| null| null| CN88| 601| null|
|8121000868-10| null| null| CN88| null| popo|
|8121000936-50| null| null| CN88| 3925| null|
|8121000936-50| null| null| CN88| null|Smith|
+-------------+-----------------+----------------------+------------+----------------+-----+
What can i do to have something like this :
+-------------+-----------------+----------------------+------------+----------------+-----+
| tally_number|work_order_number|work_order_item_number|company_code|tally_summary_id| name|
+-------------+-----------------+----------------------+------------+----------------+-----+
|8121000868-10| null| null| CN88| 601|popo |
|8121000936-50| null| null| CN88| 3925|Smith|
+-------------+-----------------+----------------------+------------+----------------+-----+