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

时间:2017-11-03 17:33:52

标签: scala apache-spark spark-dataframe

目的 - 检查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运行时显示错误。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

assert ( da.collect() == ds.collect() )