比较Spark中的两个模式(列名+可空)

时间:2018-05-07 11:53:22

标签: scala apache-spark

我知道如何使用zip + forall比较Scala中的两个列表。

我的问题是我们如何比较两个DataFrame模式。也就是说,我们希望将列名与其可为空的属性进行匹配。

我的想法是使用哈希映射来存储{column name:nullable},并进行比较。我猜它有效,但还有其他惯用方法吗?

1 个答案:

答案 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