Предполагая, что одна запись может быть представлена как:
Person(name: String, status: Boolean, date: String, id: Int)
В вашем случае каждая строка содержит двойную запись Person
с.Вы можете заключить двух человек в один ряд следующим образом:
case class Person(name: String, status: Boolean, date: String, id: Int)
case class TuplePerson(a: Person, b: Person)
Затем вы можете использовать наборы данных для сравнения a with b
.Вот полный код:
case class Person(name: String, status: Boolean, date: String, id: Int)
case class TuplePerson(a: Person, b: Person)
val df = Seq(
(TuplePerson(Person("John", true,"15-05-2019", 54), Person("John", true,"15-05-2019", 54))),
(TuplePerson(Person("Sofia", true,"15-05-2019", 54),Person("John", true,"15-05-2019", 53))),
(TuplePerson(Person("John", true,"15-05-2019", 52), Person("John", true,"15-05-2019", 52))))
.toDS()
df.where($"a" === $"b").show(false)
Выход:
+----------------------------+----------------------------+
|a |b |
+----------------------------+----------------------------+
|[John, true, 15-05-2019, 54]|[John, true, 15-05-2019, 54]|
|[John, true, 15-05-2019, 52]|[John, true, 15-05-2019, 52]|
+----------------------------+----------------------------+
Или получите разницу между левой и правой частью:
df.where($"a" =!= $"b").show(false)
+-----------------------------+----------------------------+
|a |b |
+-----------------------------+----------------------------+
|[Sofia, true, 15-05-2019, 54]|[John, true, 15-05-2019, 53]|
+-----------------------------+----------------------------+