2017-09-04 11 views
0

データフレームdf1からインスタンスを抽出しました。そのインスタンスがPysparkの別のデータフレームdf2にあるかどうかを確認したいと思います。それに直面する方法はありますか?例えばインスタンスがPysparkのデータフレームにあるかどうかを確認する方法はありますか?

インスタンス:

+------+------+------+ 
| Atr1 | Atr2 | Atr3 | 
+------+------+------+ 
| 'A' | 2 | 'B' | 
+------+------+------+ 

DATAFRAME:

+------+------+------+ 
| Atr1 | Atr2 | Atr3 | 
+------+------+------+ 
| 'C' | 1 | 'B' | 
+------+------+------+ 
| 'D' | 2 | 'A' | 
+------+------+------+ 
| 'E' | 2 | 'C' | 
+------+------+------+ 
| 'A' | 2 | 'B' | 
+------+------+------+ 

この方法で、私は、インスタンスがデータフレーム(4行目)であるため、真取得したいです。

ありがとうございました。

+0

あなたの質問を正しく理解しているかどうかわかりませんが、['except'](https://spark.apache.org/docs/latest/api/java/org/apache/)のようなものをお探しですか? spark/sql/Dataset.html#except-org.apache.spark.sql.Dataset-)? – philantrovert

+0

私はそれ以外のものを探しています。つまり、インスタンスがデータフレーム内にあるかどうかを私に知らせるものです。私はより良い理解のために私の質問を編集します。 – jartymcfly

+0

'instance.except(df).take(1).isEmpty'を試しましたか? – philantrovert

答えて

1

Pysparkはこれを行うには正しい言語ではないが、それでも:

最初に私たちのデータフレームを作成してみましょう:あなたが使用することができます

df1 = spark.createDataFrame(sc.parallelize([['A', 2, 'B']]), ['Atr1', 'Atr2', 'Atr3']) 
df2 = spark.createDataFrame(sc.parallelize([['C',1,'B'],['D',2,'A'],['E',2,'C'],['A',2,'B']]), ['Atr1', 'Atr2', 'Atr3']) 

  • subtract

    df1.subtract(df2).count() == 0 
    
  • join

    df2.join(df1, ['Atr1', 'Atr2', 'Atr3']).count() > 0 
    
  • filter

    df2.filter((df2.Atr1 == 'A') & (df2.Atr2 == 2) & (df2.Atr3 == 'B')).count() > 0 
    

は、この情報がお役に立てば幸い!

0

次のようにdf1のカウントが交差点のそれと同じである場合は、df1df2の交差点を取ると比較することができます:

>>> df1 = spark.createDataFrame(sc.parallelize([['A', 2, 'B']]), ['Atr1', 'Atr2', 'Atr3']) 
>>> df2 = spark.createDataFrame(sc.parallelize([['C',1,'B'],['D',2,'A'],['E',2,'C'],['A',2,'B']]), ['Atr1', 'Atr2', 'Atr3']) 
>>> df1.show() 
+----+----+----+ 
|Atr1|Atr2|Atr3| 
+----+----+----+ 
| A| 2| B| 
+----+----+----+ 

>>> df2.show() 
+----+----+----+ 
|Atr1|Atr2|Atr3| 
+----+----+----+ 
| C| 1| B| 
| D| 2| A| 
| E| 2| C| 
| A| 2| B| 
+----+----+----+ 

>>> df2.intersect(df1).count() == df1.count() 
True 
>>> 

pyspark.sql.DataFrame.intersectについてはドキュメントhereを確認してください。

関連する問題