检查Scala中两个SparkDataFrame的相等性

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (363)

我是Scala新手,在编写单元测试时遇到了问题。

为了进行单元测试,我尝试比较和检查Scala中的两个SparkDataFrames的相等性,并意识到检查两个SparkDataFrames是否相等并没有简单的方法。

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列的数据类型(浮动精度公差测试等)的相等性测试。

似乎没有一种简单的方法可以迭代遍历DataFrames中的所有元素,使用Scala和其他解决方案来检查两个DataFrame的相等性,例如df1.except(df2)不要在我的情况下工作,因为我需要能够提供对测试平等的支持,以及对浮动和双倍的容忍。

当然,我可以尝试预先对所有元素进行循环,然后比较结果,但是我想看看是否有其他解决方案可以让我迭代DataFrames来检查是否相等。

提问于
用户回答回答于

如果要检查两个数据帧是否为测试目的是否相等,则可以使用subtract()数据帧方法(1.3版及以上版本支持)

可以检查两个数据帧的差异是空的还是0。df1.subtract(df2).count() == 0

用户回答回答于
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) 

扫码关注云+社区

领取腾讯云代金券