我正在尝试比较两个DataFrame是否具有相同的元素,并且尽管两个DataFrame唯一的行都是相同的,但它会返回“不相等”
DFa使用listBuffer.toDF检索,DFb读取csv文件。
//Things I´ve tried
assert(DFa.collect().head === DFb.collect().head)
//Returns -> [111,222,333] did not equal [111,222,333]
assert(DFa.collect() sameElements DFb.collect())
//Returns -> scala.this.Predef.refArrayOps[org.apache.spark.sql.Row](DFa.collect()).sameElements[org.apache.spark.sql.Row](scala.this.Predef.wrapRefArray[org.apache.spark.sql.Row](DFb.collect())) was false
assert(DFa.collect().toList sameElements DFb.collect().toList)
//Returns -> scala.this.Predef.refArrayOps[org.apache.spark.sql.Row](DFa.collect()).toList.sameElements[org.apache.spark.sql.Row](scala.this.Predef.refArrayOps[org.apache.spark.sql.Row](DFb.collect()).toList) was false
//Tried with toSeq as well, and with ".deep" using "==" and same errors
我没有弄错,所有示例中的内容都是相同的,它们是相同的类型和长度,除了在DFa上我得到“ refArrayOps”和DFb我得到“ wrapRefArray”的地方
我想到的唯一解决方法是:
val List1= new ListBuffer[String]
val List2= new ListBuffer[String]
DFa.foreach(row => List1+= row.toString)
DFb.foreach(row => List2 += row.toString)
assert(List1 == List2)
但是我认为不是最好的解决方案,而且我还有另一个测试,它执行相同的“ sameElements”并成功运行。
答案 0 :(得分:0)
@ olik1将我的工作推向正确的方向,在调整了有效的代码之后,他们没有相同的架构,这就是问题所在。