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

Exp*_*rer 1 scala apache-spark apache-spark-sql

我有以下情况:

我有2个数据帧只包含1列让我们说

DF1=(1,2,3,4,5)
DF2=(3,6,7,8,9,10)
Run Code Online (Sandbox Code Playgroud)

基本上这些值是键,如果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
Run Code Online (Sandbox Code Playgroud)

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

Tza*_*har 9

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

DF1.intersect(DF2).take(1).isEmpty
Run Code Online (Sandbox Code Playgroud)

这将只使用一个action(take(1))和一个相当快的action .

  • 数据帧可能没有共同的值但不相等。Jacek 询问了相等性检查。 (2认同)