我知道如何使用zip
+ forall
比较Scala中的两个列表。
我的问题是我们如何比较两个DataFrame
模式。也就是说,我们希望将列名与其可为空的属性进行匹配。
我的想法是使用哈希映射来存储{column name:nullable},并进行比较。我猜它有效,但还有其他惯用方法吗?
答案 0 :(得分:3)
首先,你应该检索你想要比较的元素,正如Tom Lous在他的回答中所说:
val s1 = df1.schema.fields.map(f => (f.name, f.nullable))
val s2 = df2.schema.fields.map(f => (f.name, f.nullable))
然后你可以使用Lists中的diff
方法,它将返回差异,如果该方法返回并清空列表,那么没有区别,否则有:
s1.diff(s2).isEmpty
返回:如果没有找到差异,则返回true,否则返回
当一个字段存在于一个列表中但不存在另一个列表中时,diff方法不会返回差异。因此,您可能需要附加第二个条件来比较长度
s1.diff(s2).isEmpty && s1.length == s2.length