例如,我有以下DataFrame
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 0 | 10 | a |
| 1 | 10 | b |
| 2 | 20 | b |
| 3 | 30 | a |
+-----+----+------+
我希望通过以下连续步骤获得这样的子集:
id
的所有type
aid
是10和30id
与上面相同的所有行0
,1
和3
行结果子集DataFrame为:
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 0 | 10 | a |
| 1 | 10 | b |
| 3 | 30 | a |
+-----+----+------+
如何在pyspark
中实现此功能?预先感谢。
另一个后续问题,如何实现以下目标。
如果步骤更改为:
id
的所有行不同高于上面的所有行2
,因为仅此行的id
不是10或30结果数据框应为:
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 2 | 20 | b |
+-----+----+------+
您可以使用过滤器和联接操作。1。
filterDF = dataDF.filter(dataDF.type == "a")
joinedDS = dataDF.join(filterDF, on="id")
对于第2点,您可以使用left_anti连接
joinedDS1 = dataDF.join(joinedDS, on="id", how='left_anti')