Это можно сделать с помощью spark-extension и трех простых строк:
import uk.co.gresearch.spark.diff._
val opts = DiffOptions("Remarks", "df1", "df2", "From df2", "changed", "From df1", "duplicate(In Both)")
df1.diff(df2, opts).show
+------------------+----+-----------+
| Remarks|colA| colB|
+------------------+----+-----------+
| From df2| X|0bfeb09d6cf|
| From df1| B| c8a91953fc|
|duplicate(In Both)| E|8335195031e|
| From df1| A| d4f488bef2|
| From df1| D| e88480226d|
|duplicate(In Both)| C|62026fd9211|
| From df2| W|411c78854c9|
+------------------+----+-----------+
Преобразование diff
вычисляет разницу между df1
и df2
, и opts: DiffOptions
форматирует вывод в формате, который вы определили в своем вопросе.
Формат вывода по умолчанию будет выглядеть следующим образом:
df1.diff(df2).show
+----+----+-----------+
|diff|colA| colB|
+----+----+-----------+
| I| X|0bfeb09d6cf|
| D| B| c8a91953fc|
| N| E|8335195031e|
| D| A| d4f488bef2|
| D| D| e88480226d|
| N| C|62026fd9211|
| I| W|411c78854c9|
+----+----+-----------+