我有一个如下列:
+-------+------------------+-------+
| 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。或者有更好的方法吗?
答案 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|
+------+-----+-------+