如何获取两个DataFrame之间的差异?

Wil*_*llD 22 scala apache-spark apache-spark-sql

SparkSQL1.6 API(scala)中Dataframe有交叉和除外的函数,但不是一个用于区别的函数.显然,union和except的组合可用于产生差异:

df1.except(df2).union(df2.except(df1))
Run Code Online (Sandbox Code Playgroud)

但这似乎有点尴尬.根据我的经验,如果某些东西看起来很尴尬,那么有更好的方法,特别是在Scala中.

zer*_*323 36

您始终可以将其重写为:

df1.unionAll(df2).except(df1.intersect(df2))
Run Code Online (Sandbox Code Playgroud)

认真虽然这UNION,INTERSECTEXCEPT/ MINUS几乎是一个标准的SQL集合结合运算符.我不知道任何系统提供开箱即用的XOR操作.很可能是因为使用其他三个实现它是微不足道的,并且没有太多优化.


Tal*_*rda 6

为什么不下面呢?

df1.except(df2)
Run Code Online (Sandbox Code Playgroud)

  • 因为那不会执行XOR。我一直在寻找交叉路口以外的所有元素。您的代码仅返回d1中不在交集中的元素。我还需要d2中不在交叉点的那些。 (2认同)