看起來好像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
最有效的,我可以做對比。