【问题标题】:How to do equality check of two DataFrames?如何对两个 DataFrame 进行相等性检查?
【发布时间】:2019-10-14 15:23:00
【问题描述】:

我有以下场景:

我有 2 个仅包含 1 列的数据框 让我们说

DF1=(1,2,3,4,5)
DF2=(3,6,7,8,9,10)

基本上这些值是键,如果 DF1 中的键不在 DF2 中,我将创建 DF1 的镶木地板文件(在当前示例中,它应该返回 false)。我目前实现要求的方法是:

val df1count= DF1.count
val df2count=DF2.count
val diffDF=DF2.except(DF1)
val diffCount=diffDF.count
if(diffCount==(df2count-df1count)) true
else false

这种方法的问题是我调用了 4 次动作元素,这肯定不是最好的方法。有人可以建议我实现这一目标的最佳有效方法吗?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您可以使用intersect 获取两个DataFrames 共有的值,然后检查它是否为空:

    DF1.intersect(DF2).take(1).isEmpty
    

    这将只使用一个动作 (take(1)) 和一个相当快的动作。

    【讨论】:

    • 数据框可能没有共同值但不相等。Jacek 询问相等性检查。
    【解决方案2】:

    这里是检查 Dataset first 是否等于 Dataset second:

    if(first.except(second).union(second.except(first)).count() == 0)
       first  == second
    else
       first != second
    

    【讨论】:

      【解决方案3】:

      尝试将交集与计数相结合,这将确保内容相同,并且两者中的值的数量相同并断言为真

      val intersectcount= DF1.intersect(DF2).count()
      
      val check =(intersectcount == DF1.count()) && (intersectcount==DF2.count())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-19
        • 2016-04-18
        • 2023-04-04
        • 2013-02-25
        • 2016-06-27
        • 2021-05-06
        • 1970-01-01
        相关资源
        最近更新 更多