Spark: сначала сгруппируйте по столбцу, затем удалите группу, если определенный столбец равен нулю

#apache-spark #pyspark #apache-spark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

Код Pandas

 df=df.groupby('col1').filter(lambda g: ~ (g.col2.isnull()).all())
 

Сначала сгруппируйте с помощью col1 и удалите группы, если все элементы в col2 имеют значение null.
Я попробовал следующее:

Pyspark

 df.groupBy("col1").filter(~df.col2.isNotNull().all())
 

Ответ №1:

Вы можете выполнить ненулевой подсчет для каждой группы и использовать filter для удаления строк, где счетчик равен 0:

 # example dataframe
df.show()
 ---- ---- 
|col1|col2|
 ---- ---- 
|   1|null|
|   1|null|
|   2|   1|
|   2|null|
|   3|   1|
 ---- ---- 

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'not_null', 
    F.count('col2').over(Window.partitionBy('col1'))
).filter('not_null != 0').drop('not_null')

df2.show()
 ---- ---- 
|col1|col2|
 ---- ---- 
|   3|   1|
|   2|   1|
|   2|null|
 ---- ----