如何在PySpark DataFrame中分组后按计数进行过滤?
PySpark分组后过滤计数小于指定值的行
首先,你的原始DataFrame定义及展示代码如下:
data = [("1", "a"), ("2", "a"), ("3", "b"), ("4", "a")] df = spark.createDataFrame(data).toDF(*("id", "name")) df.show()
输出:
+---+----+ | id|name| +---+----+ | 1| a| | 2| a| | 3| b| | 4| a| +---+----+
分组统计的代码及输出:
grouped_df = df.groupBy("name").count() grouped_df.show()
输出:
+----+-----+ |name|count| +----+-----+ | a| 3| | b| 1| +----+-----+
要过滤出计数小于3的行,直接对分组后的DataFrame使用filter或where方法即可,两种方式效果一致:
方式1:使用SQL表达式字符串
filtered_df = grouped_df.filter("count < 3") # 等价写法:filtered_df = grouped_df.where("count < 3") filtered_df.show()
方式2:使用列对象(类型更安全)
先导入col函数,再基于列对象进行条件判断:
from pyspark.sql.functions import col filtered_df = grouped_df.filter(col("count") < 3) filtered_df.show()
两种方式最终都会得到目标结果:
+----+-----+ |name|count| +----+-----+ | b| 1| +----+-----+
内容的提问来源于stack exchange,提问作者armin
相关产品推荐
相关产品推荐

