You can always rewrite it as:
df1.unionAll(df2).except(df1.intersect(df2))
Seriously though this UNION
, INTERSECT
and EXCEPT
/ MINUS
is pretty much a standard set of SQL combining operators. I am not aware of any system which provides XOR like operation out of the box. Most likely because it is trivial to implement using other three and there is not much to optimize there.