一些情况下,我们需要将数据按照某种条件划分,一部分满足条件的进行分析,另一部分不满足条件的划分为另一组进行分析。
假设我们有如下数据:
from pyspark.sql import Row, functions as F
col_names = ["name", "score"]
value = [
("Red", 100.0),
("Origen", 80.0),
("Yellow", 55.0),
("Green", 90.0),
("Cyan", 85.0),
("Blue", 50.0),
("Purple", 70.0),
]
df = spark.createDataFrame(value, col_names)
现在需要对数据按照score进行划分,大于等于60分的记为及格,其余的记为不及格,统计及格和不及格人数。那么就需要在分组的时候依据score是否大于60的条件划分。代码如下:
df.groupBy((F.when(F.col("score")>=60,"pass").otherwise("flunk")).alias("result")).agg(F.count('*').alias("cnt")).show()
使用when条件语句进行判断,当score大于等于60时,分组记为"pass",否则就记为"flunk",并将该列重命名为"result"。聚合过程中使用count计数即可。结果如下:
+------+---+
|result|cnt|
+------+---+
| flunk| 2|
| pass| 5|
+------+---+