如何编写 scala 单元测试来比较 spark 数据帧?
How to write scala unit tests to compare spark dataframes?
目的 - 检查 spark 生成的数据框和手动创建的数据框是否相同。
早期实施有效 -
if (da.except(ds).count() != 0 && ds.except(da).count != 0)
布尔值返回 - true
其中da和ds分别是生成的dataframe和创建的dataframe。
我在这里 运行通过 spark-shell 来运行程序。
较新的实现不起作用 -
assert (da.except(ds).count() != 0 && ds.except(da).count != 0)
布尔值返回 - false
其中da和ds分别是生成的dataframe和创建的dataframe。
这里我改用了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
中央 Maven 存储库中包含测试共享代码(SharedSQLContext 等)的库,您可以将它们包含在项目中,并使用 "checkAnswer" 方法比较数据帧。
我通过将其用作依赖项 https://github.com/MrPowers/spark-fast-tests 解决了这个问题。
另一个解决方案是单独迭代数据框的成员并比较它们。
目的 - 检查 spark 生成的数据框和手动创建的数据框是否相同。
早期实施有效 -
if (da.except(ds).count() != 0 && ds.except(da).count != 0)
布尔值返回 - true
其中da和ds分别是生成的dataframe和创建的dataframe。
我在这里 运行通过 spark-shell 来运行程序。
较新的实现不起作用 -
assert (da.except(ds).count() != 0 && ds.except(da).count != 0)
布尔值返回 - false
其中da和ds分别是生成的dataframe和创建的dataframe。
这里我改用了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
中央 Maven 存储库中包含测试共享代码(SharedSQLContext 等)的库,您可以将它们包含在项目中,并使用 "checkAnswer" 方法比较数据帧。
我通过将其用作依赖项 https://github.com/MrPowers/spark-fast-tests 解决了这个问题。
另一个解决方案是单独迭代数据框的成员并比较它们。