Apache spark Spark:首先按列分组,如果特定列为空,则删除该组

Apache spark Spark:首先按列分组,如果特定列为空,则删除该组,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,熊猫代码 df=df.groupby('col1').filter(lambda g: ~ (g.col2.isnull()).all()) 使用col1创建第一个组,如果col2中的所有元素都为null,则删除组。 我尝试过以下几点: Pyspark df.groupBy("col1").filter(~df.col2.isNotNull().all()) 您可以对每个组执行非空计数,并使用筛选器删除计数为0的行: # example dataframe df.show

熊猫代码

df=df.groupby('col1').filter(lambda g: ~ (g.col2.isnull()).all())
使用col1创建第一个组,如果col2中的所有元素都为null,则删除组。 我尝试过以下几点:

Pyspark

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

您可以对每个组执行非空计数,并使用筛选器删除计数为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|
+----+----+