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



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

早期实施行之有效-

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

返回布尔值-true

其中da和ds分别是生成的数据帧和创建的数据帧。

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

不起作用的新实现-

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

返回布尔值-false

其中da和ds分别是生成的数据帧和创建的数据帧。

在这里,我使用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

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

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

另一种解决方案是分别迭代数据帧的成员并进行比较。

相关内容

  • 没有找到相关文章

最新更新