ここには2つのデータフレームがあります。
予想されるデータフレーム:
+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
| 3| Chennai| rahman|9848022330| 45000|SanRamon|
| 1|Hyderabad| ram|9848022338| 50000| SF|
| 2|Hyderabad| robin|9848022339| 40000| LA|
| 4| sanjose| romin|9848022331| 45123|SanRamon|
+------+---------+--------+----------+-------+--------+
実際のデータフレーム:
+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
| 3| Chennai| rahman|9848022330| 45000|SanRamon|
| 1|Hyderabad| ram|9848022338| 50000| SF|
| 2|Hyderabad| robin|9848022339| 40000| LA|
| 4| sanjose| romino|9848022331| 45123|SanRamon|
+------+---------+--------+----------+-------+--------+
2つのデータフレームの違いは次のとおりです。
+------+--------+--------+----------+-------+--------+
|emp_id|emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+--------+--------+----------+-------+--------+
| 4| sanjose| romino|9848022331| 45123|SanRamon|
+------+--------+--------+----------+-------+--------+
例外関数df1.except(df2)を使用していますが、これに関する問題は、異なる行全体を返すことです。必要なのは、その行内でどの列が異なるかを確認することです(この場合、「emp_name」の「romin」と「romino」は異なります)。私たちはそれに関して非常に困難を抱えており、どんな助けも素晴らしいでしょう。
上記の質問で説明されているシナリオから、行ではなく列で違いを見つけなければならないようです。
そのため、ここで選択的な差異を適用する必要があります。これにより、異なる値を持つ列と値が提供されます。
ここで、選択的な違いを適用するには、次のようなコードを記述する必要があります。
まず、予想されるデータフレームと実際のデータフレームで列を見つける必要があります。
val columns = df1.schema.fields.map(_。name)
次に、列ごとに差を見つけなければなりません。
val selectedDifferences = columns.map(col => df1.select(col).except(df2.select(col)))
最後に、どの列に異なる値が含まれているかを調べる必要があります。
selectionDifferences.map(diff => {if(diff.count> 0)diff.show})
そして、異なる値を含む列のみを取得します。このような:
+--------+
|emp_name|
+--------+
| romino|
+--------+
これがお役に立てば幸いです!