当前位置: 首页 > 知识库问答 >
问题:

比较架构忽略nullable

童化
2023-03-14
StructType(List(
StructField(ClientId,StringType,True),
StructField(PublicId,StringType,True),
StructField(ExternalIds,ArrayType(StructType(List(
    StructField(AppId,StringType,True),
    StructField(ExtId,StringType,True),
)),True),True),
....
StructType(List(
StructField(ClientId,StringType,True),
StructField(PublicId,StringType,False),
StructField(ExternalIds,ArrayType(StructType(List(
    StructField(AppId,StringType,True),
    StructField(ExtId,StringType,False),
)),True),True),
....

当我执行df_a.schema==df_b.schema时,结果显然是false。但是我想忽略“nullable”参数,不管它是false还是true,如果结构相同,它应该返回true

有可能吗?

共有1个答案

温成济
2023-03-14

使用以下两个DataFrame架构的示例:

df_A.printSchema()
#root
# |-- ClientId: string (nullable = true)
# |-- PublicId: string (nullable = true)
# |-- PartyType: string (nullable = true)

df_B.printSchema()
#root
# |-- ClientId: string (nullable = true)
# |-- PublicId: string (nullable = true)
# |-- PartyType: string (nullable = false)

假设字段的顺序相同,您可以访问架构中每个字段的名称datatype,并压缩它们以进行比较:

print(
    all(
        (a.name, a.dataType) == (b.name, b.dataType) 
        for a,b in zip(df_A.schema, df_B.schema)
    )
)
#True

如果它们的顺序不相同,则可以比较排序的字段:

print(
    all(
        (a.name, a.dataType) == (b.name, b.dataType) 
        for a,b in zip(
            sorted(df_A.schema, key=lambda x: (x.name, x.dataType)), 
            sorted(df_B.schema, key=lambda x: (x.name, x.dataType))
        )
    )
)
#True
print(len(df_A.schema) == len(df_B.schema))
#True
 类似资料:
  • 我需要比较使用自定义差异侦听器忽略子节点序列和属性列表序列的2个XML: 我的代码适用于: 我找到了一个临时的解决方案(8小时内不能在我自己的问题上添加评论): 我之前用:ElementNameAndAttributeQualifier重写了ElementQualifier,如果我将其更改为RecursiveElementNameAndTextQualifier,我可以得到我想要的结果 还可以使用

  • 问题内容: 问题很简单。JAVA中是否有任何函数可以比较两个字符串并在忽略重音字符的情况下返回true? 即 回报相等。 谢谢 问题答案: 我认为您应该使用Collat​​or类。它允许您设置强度和区域设置,并将适当地比较字符。 从Java 1.6 API中: 您可以设置“整理器”的“强度”属性来确定在比较中被视为重要的差异水平。提供了四个优势:主要,次要,高等教育和同等优势。语言功能的优势确切分

  • 问题内容: 这样做的目的是从用户那里获得一个句子并确定每个元音中出现了多少个。大部分是完成的,除了我不确定如何忽略大写和小写字母外,但我猜是equalsIgnoreCase或toUpperCase()。 我想也知道,如果有另一种方式做到这一点使用的一些其他类,或。我仍然是编程的新手,这一章让我丧命。 } 这里的代码 问题答案: 由于您正在比较原始字符, 应该已经是您使用Java的最佳方式。 但是,

  • 问题内容: 我有这样的XML消息: 我想将被测试方法产生的这种类型的消息与预期的消息进行比较,但我不在乎。因此,我希望以上消息被认为等于: 我正在使用XMLUnit的最新版本。 我在想答案是创建一个习惯。如果有准备好要使用的东西,我只是不想重新发明轮子。 欢迎使用XMLUnit以外的库的建议。 问题答案: 自从回答了这个问题以来,XMLUnit发生了很多变化。 现在,您可以在使用时轻松忽略节​​点

  • 我正在尝试比较自定义对象的列表。我设置了LEVENSHTEIN_DISTANCE并创建了自定义比较器。对象之间唯一的区别是列表中值的顺序。我希望“没有变化”,但我得到了listchange。结果和示例如下。我做错了什么? 非常感谢和问候,安德烈