如何在同一列pyspark sql中过滤多个条件

时间:2017-07-08 13:28:53

标签: apache-spark pyspark apache-spark-sql 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()

现在,如何只获取只有视图未处理的ID。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

一个选项可以是"leftanti"自我加入,以消除包含name的所有"processed"

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