首页 > 解决方案 > PySpark - Groupby 后删除行?

问题描述

我的火花是3.0版

我已经通过 groupBy() 聚合了数据。我想创建一个函数和一个阈值,如果数据量<200(这将是阈值),那么我想从主表中删除类别“C”。

我将如何在 PySpark 上做到这一点?我想过创建一个列表来附加“C”,但我不知道该怎么做=/

图 2 是预期的输出。有人能帮我吗?

在此处输入图像描述

在此处输入图像描述

标签: pythonpyspark

解决方案


尝试使用groupBy并聚合以获取sum() ,然后collect_list类别的所有值分解数组。

Example:

df.show()
#+----+----+
#|col1|col2|
#+----+----+
#|   A| 250|
#|   A| 250|
#|   A|  50|
#|   B| 250|
#|   B| 250|
#|   B|  50|
#|   C|   5|
#|   C|   5|
#|   C|  10|
#+----+----+

from pyspark.sql.functions import *


df.groupBy("col1").agg(sum(col("col2")).alias("count"),collect_list(col("col2")).alias("col2")).\
filter(col("count") >200).\
select("col1",explode("col2").alias("col2")).\
show()
#+----+----+
#|col1|col2|
#+----+----+
#|   B| 250|
#|   B| 250|
#|   B|  50|
#|   A| 250|
#|   A| 250|
#|   A|  50|
#+----+----+

推荐阅读