如何编写 scala 单元测试来比较 spark 数据帧?

How to write scala unit tests to compare spark dataframes?

目的 - 检查 spark 生成的数据框和手动创建的数据框是否相同。

早期实施有效 -

if (da.except(ds).count() != 0 && ds.except(da).count != 0)

布尔值返回 - true

其中da和ds分别是生成的dataframe和创建的dataframe。

我在这里 运行通过 spark-shell 来运行程序。

较新的实现不起作用 -

assert (da.except(ds).count() != 0 && ds.except(da).count != 0)

布尔值返回 - false

其中da和ds分别是生成的dataframe和创建的dataframe。

这里我改用了scalatest的assert方法,但是返回的结果没有返回true。

为什么在以前的方法有效时尝试使用新的实现?要让 sbt 使用 scalatest 始终通过 sbt test 或编译时 运行 测试文件。

当 运行 通过 spark-shell 时比较 spark 数据帧的相同代码给出了正确的输出,但当 运行 在 sbt 中使用 scalatest 时显示错误。

这两个程序实际上是一样的,但结果不同。可能是什么问题?

Spark Core 中存在比较数据帧的测试,示例: https://github.com/apache/spark/blob/master/sql/core/src/test/scala/org/apache/spark/sql/GeneratorFunctionSuite.scala

中央 Maven 存储库中包含测试共享代码(SharedSQLContext 等)的库,您可以将它们包含在项目中,并使用 "checkAnswer" 方法比较数据帧。

我通过将其用作依赖项 https://github.com/MrPowers/spark-fast-tests 解决了这个问题。

另一个解决方案是单独迭代数据框的成员并比较它们。