2017-09-04 53 views
0

我有一個實例從數據框df1中提取,我想檢查該實例是否在Pyspark的另一個數據框df2中。有辦法面對嗎?如何檢查實例是否位於Pyspark的數據框中?

例如:

實例:

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

數據框:

+------+------+------+ 
| 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不這樣做正確的語言,但仍:

首先,讓我們創建dataframes:

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

您可以採取的df1df2交集和比較,如果的df1計數等於交集,如下所示:

>>> 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

相關問題