Apache spark GroupBy计数应用于同一列的多个语句
我试图在一组标识上应用groupBy语句,这些标识上印有一个或多个(通常是多个)代码。代码都在同一列中。然后我只想获取那些有代码1但没有代码2的ID 数据框如下所示: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语句中实现这一
| 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|
+---+----+