2017-07-08 38 views
2

多個條件我有一列像下面:如何篩選在同一列pyspark SQL

+-------+------------------+-------+ 
| name|    value|user_id| 
+-------+------------------+-------+ 

| user 1|    view |  1| 
| user 1|   processed|  1| 
| user 2|    view |  3| 
| user 3|    view |  4| 
+-------+------------------+-------+ 

我想列如下圖所示。

+-------+------------------+-------+ 
| name|    value|user_id| 
+-------+------------------+-------+ 
| user 2|    view |  3| 
| user 3|    view |  4| 
+-------+------------------+-------+ 

簡單地說,消除完成兩個動作的ID。

目前,我有一個像下面

df1 = df.where(value=="processed").select("id").distinct() 
df2 = df.where(value=="view").select("id").distinct() 

現在,如何讓僅只有圖中不processed.Or有沒有更好的方式來做到這一點IDS兩個數據幀?

+0

可以格式化你的問題嗎? – mtoto

+0

完成...請檢查現在... –

回答

3

一種選擇可能是一個"leftanti"自連接,以消除包含"processed"所有name的:

result = df.join(df.where(df.value=="processed") \ 
        .select("name") \ 
        .distinct(), 
       "name", "leftanti") 
result.show() 
+------+-----+-------+ 
| name|value|user_id| 
+------+-----+-------+ 
|user 3| view|  4| 
|user 2| view|  3| 
+------+-----+-------+ 
+0

謝謝mtoto。但列中有多個值。至少有5,6個不同的值。 –

+0

我認爲這應該工作。我將添加多個條款 –

+1

@mtoto這裏是斯卡拉版本https://stackoverflow.com/a/39889263/3415409 – eliasah