如何写斯卡拉单元测试来比较火花dataframes?

问题描述 投票:3回答:3

目的 - 如果由火花产生的数据帧和手动创建的数据帧是相同的检查。

此前执行其工作 -

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

布尔返回 - true

其中,Da和DS是将所生成的数据帧和分别创建的数据帧。

在这里,我通过运行火花壳程序。

较新的实现不工作 -

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

布尔返回 - false

其中,Da和DS是将所生成的数据帧和分别创建的数据帧。

在这里我使用scalatest的断言方法来代替,但返回的结果没有返回为真。

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

相同的代码时,通过火花shell中运行比较火花dataframes,给出正确的输出,但在SBT使用scalatest运行时显示错误。

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

scala apache-spark spark-dataframe
3个回答
1
投票

对于比较dataframes测试存在星火核心,例如:https://github.com/apache/spark/blob/master/sql/core/src/test/scala/org/apache/spark/sql/GeneratorFunctionSuite.scala

与测试库共享代码(SharedSQLContext,ECT)目前在Maven中央回购,你可以将它们包括在项目中,并使用比较dataframes“checkAnswer”的方法。


1
投票

我用这个作为一个依赖https://github.com/MrPowers/spark-fast-tests解决的问题。

另一种解决办法是将数据框的成员单独遍历并加以比较。

© www.soinside.com 2019 - 2024. All rights reserved.