目的-检查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。
另一种解决方案是分别迭代数据帧的成员并进行比较。