目的 - 检查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运行时显示错误。
这两个程序实际上是相同的,但结果是不同的。可能是什么问题?
答案 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() )