【发布时间】:2019-10-25 18:31:50
【问题描述】:
我是 Scala 新手,在编写单元测试时遇到问题。
我试图在 Scala 中比较和检查两个 Spark DataFrame 的相等性以进行单元测试,并意识到没有简单的方法来检查两个 Spark DataFrame 的相等性。
C++ 等效代码是(假设 DataFrame 在 C++ 中表示为双精度数组):
int expected[10][2];
int result[10][2];
for (int row = 0; row < 10; row++) {
for (int col = 0; col < 2; col++) {
if (expected[row][col] != result[row][col]) return false;
}
}
实际测试将涉及基于 DataFrame 列的数据类型的相等性测试(对浮点数进行精度容差测试等)。
似乎没有一种简单的方法可以使用 Scala 对 DataFrame 中的所有元素进行迭代循环,而其他用于检查两个 DataFrame 相等性的解决方案(例如df1.except(df2))在我的情况下不起作用,因为我需要能够为测试相等性和浮点数和双精度数提供支持。
当然,我可以尝试事先对所有元素进行四舍五入,然后比较结果,但我想看看是否有任何其他解决方案可以让我遍历 DataFrame 以检查是否相等。
【问题讨论】:
-
你的数据框有多大?如果它们不是那么大,您可以对它们进行排序/收集,然后轻松进行比较。
-
因为这些是单元测试数据帧,所以应该很小。只需将它们收集到一个列表中并进行比较。
-
是的,我的测试目前将数据帧收集到一个列表中并进行比较,但我希望创建也可以测试更大数据帧的工具。我猜没有简单的方法可以做到这一点?
-
*** 3 年 4 个月前询问过 5 个月前有效 已查看 7k 次 --- YET 仍然没有接受答案 ...
标签: scala unit-testing apache-spark spark-dataframe