gpt4 book ai didi

scala - 在 Spark 中比较两个模式(列名 + 可为空)

转载 作者:行者123 更新时间:2023-12-01 11:16:33 27 4
gpt4 key购买 nike

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

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

我的想法是用hash map来存储{column name: nullable},然后做比较。我想它可行,但还有其他惯用的方法吗?

最佳答案

首先你应该检索你想要比较的元素,正如 Tom Lous 在他的回答中所说:

val s1 = df1.schema.fields.map(f => (f.name, f.nullable))
val s2 = df2.schema.fields.map(f => (f.name, f.nullable))

然后你可以只使用列表中的diff方法,它会返回差异,如果该方法返回空列表,则没有差异,否则有:

s1.diff(s2).isEmpty

返回:如果没有发现差异则返回 true,否则返回 false

当一个字段存在于一个列表中但不存在于另一个列表中时,请考虑 diff 方法返回的差异。所以你可能需要附加第二个条件来比较长度

s1.diff(s2).isEmpty && s1.length == s2.length

关于scala - 在 Spark 中比较两个模式(列名 + 可为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com