我是Scala的新手,在编写单元测试时遇到了问题。
我正在尝试在Scala中比较和检查两个Spark DataFrames单元测试的相等性,并意识到没有简单的方法来检查两个Spark DataFrames的相等性。
相当于C++的代码为(假设DataFrames在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;
}
}
实际的测试将涉及基于DataFrames列的数据类型的相等性测试(使用浮点数的精度、容差等进行测试)。
似乎没有一种简单的方法可以使用Scala迭代遍历DataFrames中的所有元素,而其他用于检查两个DataFrames的相等性的解决方案(如df1.except(df2)
)在我的例子中不起作用,因为我需要能够提供对测试相等性的支持,以及对浮点数和双精度浮点数的容差。
当然,我可以尝试事前对所有元素进行四舍五入,然后比较结果,但我想看看是否有其他解决方案允许我遍历DataFrames以检查是否相等。
发布于 2017-11-14 16:58:11
import org.scalatest.{BeforeAndAfterAll, FeatureSpec, Matchers}
outDf.collect() should contain theSameElementsAs (dfComparable.collect())
# or ( obs order matters ! )
// outDf.except(dfComparable).toDF().count should be(0)
outDf.except(dfComparable).count should be(0)
发布于 2016-11-09 14:32:43
如果您想检查两个数据帧是否相等,可以使用数据帧的subtract()
方法( 1.3及以上版本支持)
您可以检查两个数据帧的diff是否为空或0。例如df1.subtract(df2).count() == 0
https://stackoverflow.com/questions/40497639
复制相似问题