SparkSQL
1.6 API(scala)Dataframe
には、交差および除外機能がありますが、違いはありません。2つのDataFramesの違いを取得する方法は?
df1.except(df2).union(df2.except(df1))
しかし、これは少し厄介なようだ:明らかに、労働組合のとを除く組み合わせが違いを生成するために使用することができます。私の経験上、何かが厄介なように見える場合は、特にScalaでそれを行うより良い方法があります。
SparkSQL
1.6 API(scala)Dataframe
には、交差および除外機能がありますが、違いはありません。2つのDataFramesの違いを取得する方法は?
df1.except(df2).union(df2.except(df1))
しかし、これは少し厄介なようだ:明らかに、労働組合のとを除く組み合わせが違いを生成するために使用することができます。私の経験上、何かが厄介なように見える場合は、特にScalaでそれを行うより良い方法があります。
あなたはいつものようにそれを書き換えることができます:このUNION
、INTERSECT
とEXCEPT
/MINUS
はかなりの演算子を組み合わせたSQLの標準セットですが、真剣に
df1.unionAll(df2).except(df1.intersect(df2))
。私はXORのような操作をボックスの外に提供するシステムは認識していません。ほとんどの場合、他の3つを使用して実装するのは簡単で、そこでは最適化することはあまりありません。
なぜですか?
df1.except(df2)
これはXORを実行しないためです。 私は交差点にないすべての要素を探していました。 あなたのコードは、交差点にないd1の要素だけを返します。 また、交差点にないd2のものも必要です。 – WillD
EXCEPT(またはEXCEPTのエイリアスであるMINUS)が結果をデデュープすることに注意してください。 EXCEPT」、私はそこに書いたように
https://issues.apache.org/jira/browse/SPARK-21274
:だからあなたが設定(diffはあなたが言及した)+「以外」が予想される場合、「交差」オリジナルデータフレームに等しくなるように設定し、重複を保ち、この機能要求を検討ALL "はSpark SQLで書き換えられます
SELECT a,b,c
FROM tab1 t1
LEFT OUTER JOIN
tab2 t2
ON (
(t1.a, t1.b, t1.c) = (t2.a, t2.b, t2.c)
)
WHERE
COALESCE(t2.a, t2.b, t2.c) IS NULL
ありがとうございます。それがあれば、とにかくこのようなことが起こるはずです。 – WillD