2017-06-02 6 views
5

スカラ座で異なる2つのデータフレームやプリント列を比較しますどのように我々はここで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| 
+------+--------+--------+----------+-------+--------+ 

except関数df1.except(df2)を使用していますが、この問題は、異なる行全体を返します。私たちが望むのは、その列内でどの列が異なるかを見ることです(この場合、 "romin"と "emp_name"の "romino"は異なります)。私たちはそれに多大な困難を抱いており、どんな助けも素晴らしいでしょう。

+0

内部結合とemp_nameの両方を保持し、両方が同じであるすべての行を削除します。 –

+0

データを前提とすることはできますか?たとえば、emp_idが一意であると想定できますか?またはそれ以上のものが同じでなければならず、そのデータの検証だけが関連していますか?さもなければ、なぜこの行がemp_nameで異なっていて、他のemp_idと完全に異なっていないのですか? –

+0

類似した質問https://stackoverflow.com/questions/44807450/how-to-compare-two-dataframes-and-print-extra- 44810081#44810081 –

答えて

7

上記の質問に記載されているシナリオからは、列と行の間に違いがあるように見えます。

このようにするには、ここで選択的な違いを適用する必要があります。この違いは、異なる値を持つ列とその値を提供します。

  1. まず私たちは期待と実際のデータフレームの列を見つける必要がある:

    は今、選択的な違いを適用するために、我々はこのようなコードに何かを記述する必要があります。

    ヴァル列= df1.schema.fields.map(_。名前)

  2. はその後、我々は差列方向を見つける必要があります。

    ヴァルselectiveDifferences = columns.map(COL => df1.select(COL).except(df2.select(COL)))最後に

  3. 我々は含まれている列を見つける必要があり異なる値。

    selectiveDifferences.map(差分=> {IF(diff.count> 0)diff.show})

そして、我々は、異なる値を含む列のみを取得します。このように:

+--------+ 
|emp_name| 
+--------+ 
| romino| 
+--------+ 

私はこれが役立ちます。

+0

これは完璧な@himanshullTianです。どうもありがとうございました。私は最初の2つのステップを持っていましたが、最後の重要なステップがありませんでした!フォローアップの質問は、実際のデータフレームに余分な行がある場合はどうなりますか? (予想は4行、実績は5)。それをどのように区別し、すべての列を印刷するのではなく、行全体を印刷するのですか? – rominoushana

関連する問題