На стороне pyspark вы можете создать два df в зависимости от того, будет ли table1.cookie нулевым или нет, затем объединить их
>>> import pyspark.sql.functions as F
>>> df1 = table1.where(F.isnull('cookie')==True).join(table2, table1.id == table2.id, 'inner').select(table1.id,table2.cookie)
>>> df2 = table1.where(F.isnull('cookie')==False).join(table2, table1.cookie == table2.cookie, 'inner').select(table1.id,table2.cookie)
>>> df1.union(df2).show()
+---+------+
| id|cookie|
+---+------+
| 2| 3e4r|
| 1| 1q2w|
+---+------+