sameElements и "==" возвращают не равные, хотя DataFrames равны - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь сравнить, если два DataFrames имеют одинаковые элементы, и хотя единственная строка, которая имеет оба dataframes, идентична, возвращается «не равно»

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" и успешно работает.

1 Ответ

0 голосов
/ 23 мая 2019

@ olik1 подтолкнул меня на правильный путь, у них не было той же схемы, что и было проблемой, после настройки кода, который он работал.

...