Apache spark GroupBy计数应用于同一列的多个语句

Apache spark GroupBy计数应用于同一列的多个语句,apache-spark,pyspark,group-by,apache-spark-sql,Apache Spark,Pyspark,Group By,Apache Spark Sql,我试图在一组标识上应用groupBy语句,这些标识上印有一个或多个(通常是多个)代码。代码都在同一列中。然后我只想获取那些有代码1但没有代码2的ID 数据框如下所示: | ID | Code | | -------- | -------------- | | 123| Code1| | 123| Code2| | 234| Code1| | 567| Code1| | 567| Code2| 我知道这也可以通过使用left_anti-join来实现,但我也希望能够在groupby语句中实现这一

我试图在一组标识上应用groupBy语句,这些标识上印有一个或多个(通常是多个)代码。代码都在同一列中。然后我只想获取那些有代码1但没有代码2的ID

数据框如下所示:

| ID | Code |
| -------- | -------------- |
| 123| Code1|
| 123| Code2|
| 234| Code1|
| 567| Code1|
| 567| Code2|
我知道这也可以通过使用left_anti-join来实现,但我也希望能够在groupby语句中实现这一点


任何人有任何建议吗?

您可以分组并收集代码列表,然后检查代码1和代码2是否存在:

import pyspark.sql.functions as F

df2 = df.groupBy('ID').agg(
    (
        F.array_contains(F.collect_list('Code'), 'Code1') & 
        ~F.array_contains(F.collect_list('Code'), 'Code2')
    ).alias('flag')
)

df2.show()
+---+-----+
| ID| flag|
+---+-----+
|234| true|
|567|false|
|123|false|
+---+-----+

df2.filter('flag').show()
+---+----+
| ID|flag|
+---+----+
|234|true|
+---+----+