看起来好像StructType
保留了订单,所以包含相同StructField
的两个StructType
不被视为等同。如何比较两个StructType共享相同的内容?
例如:
val st1 = StructType(
StructField("ii",StringType,true) ::
StructField("i",StringType,true) :: Nil)
val st2 = StructType(
StructField("i",StringType,true) ::
StructField("ii",StringType,true) :: Nil)
println(st1 == st2)
回报false
即使他们都有StructField("i",StringType,true)
和StructField("ii",StringType,true)
,只是顺序不同。
我需要一个测试,可以说,因为我的目的,这两个是不是不同的这两个是等价的。
val schema1 = StructType(StructField("A",ArrayType(st1,true),true) :: Nil)
val schema2 = StructType(StructField("A",ArrayType(st2,true),true) :: Nil)
val final_schema = StructType((schema1 ++ schema2).distinct)
的final_schmea
结果只能有A
,而不是两个一个StructType
,但distinct
认为这两个StructType
不同的,所以我最终得到两个不同的StructField
命名为A
。所以我的问题是,有没有办法根据它们的内容比较两个StructType
S,没有订单?
编辑:
经过进一步调查,因为StructType
基本上是Seq<StructField>
,我可以做content comparison for that works for Seq
,但我试图想办法为嵌入式StructType
最有效的,我可以做对比。