Comment obtenir la différence entre deux DataFrames?
Dans le SparkSQL
1.6 API (scala) Dataframe
a des fonctions pour se croisent et sauf, mais pas pour la différence. De toute évidence, une combinaison de l'union et à l'exception peut être utilisé pour générer de la différence:
df1.except(df2).union(df2.except(df1))
Mais cela semble un peu maladroit. Dans mon expérience, si quelque chose semble maladroit, il y a une meilleure façon de le faire, notamment en Scala.
source d'informationauteur WillD
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours réécrire sous la forme:
Sérieusement cette
UNION
INTERSECT
etEXCEPT
/MINUS
est à peu près un ensemble standard de SQL combinant les opérateurs. Je ne suis pas au courant de tout système qui fournit XOR comme l'opération de la boîte. Probablement parce qu'elle est facile à implémenter à l'aide de trois autres et il n'y a pas grand chose à optimiser.pourquoi pas les dessous de?
Avis que l'EXCEPTION (ou du MOINS qui n'est qu'un alias pour l'EXCEPTION de-dup résultats. Donc, si vous vous attendez à ce "sauf" (le diff que vous avez mentionné) + "intersect" ensemble à être égale à l'original dataframe, considérer cette demande de fonctionnalité qui maintient les doublons:
https://issues.apache.org/jira/browse/SPARK-21274
Comme je l'ai écrit-il, "à l'EXCEPTION de TOUS" peut être réécrit de la Spark SQL comme