Вы можете использовать zip
& forall
, только если уверены, что количество столбцов и порядок одинаковы.Или я что-то упустил?
В любом случае, я думаю, что это был бы способ сделать это:
val s1 = df1.schema.fields.map(f => (f.name, f.nullable))
val s2 = df2.schema.fields.map(f => (f.name, f.nullable))
val res = s1 zip s2 forall {
case ((f1, n1), (f2,n2)) => f1 == f2 && n1 == n2
}
Вы могли бы даже отсортировать s1
& s2
, чтобы убедиться, что имена полейвыровняйте, но это все еще кажется хитрым.
В противном случае я бы использовал метод diff
.Будьте внимательны.Отсутствующие поля, которые существуют в df2, игнорируются
val res = (s1 diff s2).length == 0