【发布时间】:2018-07-19 17:36:10
【问题描述】:
似乎StructType 保留了顺序,因此包含相同StructFields 的两个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 的结果应该只有一个 StructType 和 A 而不是两个,但 distinct 认为这两个 StructType 不同,所以我最终得到两个不同的 StructField,名为 @987654336 @。所以我的问题是,有没有办法根据它们的内容而不是订单来比较两个StructTypes?
编辑:
经过进一步调查,由于StructType基本上是Seq<StructField>,我可以做content comparison for that works for Seq,但我正在想一种方法可以最有效地对嵌入式StructType进行比较。
【问题讨论】:
标签: scala apache-spark apache-spark-sql