如何从Pyspark中的DataFrame中获得这种子集?

问题描述 投票:0回答:1

例如,我有以下DataFrame

+-----+----+------+
| idx | id | type |
+-----+----+------+
|   0 | 10 | a    |
|   1 | 10 | b    |
|   2 | 20 | b    |
|   3 | 30 | a    |
+-----+----+------+

我希望通过以下连续步骤获得这样的子集:

  1. 获取id的所有type a
    • 过滤后的id1030
  2. 获取id与上面相同的所有行
    • 选择013

结果子集DataFrame为:

+-----+----+------+
| idx | id | type |
+-----+----+------+
|   0 | 10 | a    |
|   1 | 10 | b    |
|   3 | 30 | a    |
+-----+----+------+

如何在pyspark中实现此功能?预先感谢。


另一个后续问题,如何实现以下目标。

如果步骤更改为:

  1. 获取id的所有行不同高于上面的所有行
    • 选择行2,因为仅此行的id不是1030

结果数据框应为:

+-----+----+------+
| idx | id | type |
+-----+----+------+
|   2 | 20 | b    |
+-----+----+------+
python apache-spark pyspark
1个回答
0
投票

您可以使用过滤器和联接操作。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')
© www.soinside.com 2019 - 2024. All rights reserved.