首页 > 解决方案 > 如何从 Pyspark 中的 DataFrame 中获取这种子集?

问题描述

例如,我有以下 DataFrame

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

我想要通过以下顺序步骤获得这样的子集:

  1. 得到所有idtype
    • 过滤id的是1030
  2. id获取与上面相同的 所有行
    • 0,13被选中

生成的子集 DataFrame 是:

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

我怎样才能实现这个pyspark?提前致谢。


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

如果步骤更改为:

  1. 获取与上面 id不同所有行
    • 2被选中,因为只有这一行id不是1030

生成的 DataFrame 应该是:

+-----+----+------+
| idx | id | type |
+-----+----+------+
|   2 | 20 | b    |
+-----+----+------+

标签: pythonapache-sparkpyspark

解决方案


您可以使用过滤器和连接操作。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')

推荐阅读