Python 如何从Pyspark中的数据帧中获取此类子集?

Python 如何从Pyspark中的数据帧中获取此类子集?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,例如,我有以下数据帧 +-----+----+------+ | idx | id | type | +-----+----+------+ | 0 | 10 | a | | 1 | 10 | b | | 2 | 20 | b | | 3 | 30 | a | +-----+----+------+ 我希望通过以下顺序步骤得到这样一个子集: 获取类型的所有ida 过滤后的id为10和30 获取id与上面相同的所有行 选择行0、1和3 生成的子集数

例如,我有以下数据帧

+-----+----+------+
| idx | id | type |
+-----+----+------+
|   0 | 10 | a    |
|   1 | 10 | b    |
|   2 | 20 | b    |
|   3 | 30 | a    |
+-----+----+------+
我希望通过以下顺序步骤得到这样一个子集:

  • 获取
    类型的所有
    id
    a
    • 过滤后的
      id
      1030
  • 获取
    id
    与上面相同的所有行
    • 选择行
      0
      1
      3
  • 生成的子集数据帧是:

    +-----+----+------+
    | idx | id | type |
    +-----+----+------+
    |   0 | 10 | a    |
    |   1 | 10 | b    |
    |   3 | 30 | a    |
    +-----+----+------+
    
    如何在
    pyspark
    中实现此功能?提前谢谢


    另一个后续问题是,如何实施以下内容

    如果步骤更改为:

  • 获取
    id
    与上面不同的所有行
    • 选择行
      2
      ,因为只有此行的
      id
      不是1030
  • 生成的数据帧应为:

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

    您可以使用筛选器和联接操作。 一,

    对于点2,您可以使用left_anti-join

    joinedDS1 =  dataDF.join(joinedDS, on="id", how='left_anti')
    

    在我的头顶上使用一个自连接,类似于
    df.alias('r')。连接(df.alias('l')。其中(“l.type='a'))。选择('id'),on=“id”,how=“inner”)。show()
    应该会让你非常接近。谢谢你的回答@pault@pault嗨,你能帮我回答第二个问题吗?感谢您的回答,另一个后续问题:对于步骤2,我如何获得排除
    id
    过滤的行?因此,应该选择第2行,因为只有第2行具有
    id
    ,而不是
    10
    30
    。谢谢,我尝试了您的答案,有一个问题,加入后的列是重复的。加入时如何避免重复列?您可以使用drop column OptionTanks,您的解决方案解决了特定问题。但是我的Dataframe有多个列,当连接时,所有列都是重复的。我尝试了
    删除(dataDF.columns)
    ,但不起作用。@TrW236然后您可以指定所选列
    joinedDS1 =  dataDF.join(joinedDS, on="id", how='left_anti')