如何对两个DataFrame进行等式检查?

时间:2017-02-10 20:04:39

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

我有以下情况:

我有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次,这肯定不是最好的方法。有人可以建议我实现这个目标的最有效方法吗?

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

以下是检查数据集首先是否等于数据集秒:

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

答案 2 :(得分:0)

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

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

val检查=(intersectcount == DF1.count())&&(intersectcount == DF2.count())