Pyspark:如何在单个groupBy中计算平均值和计数?

24

我想在Pyspark中使用单个group by语句计算平均值和计数。我该怎么做?

df = spark.createDataFrame([(1, 'John', 1.79, 28,'M', 'Doctor'),
                        (2, 'Steve', 1.78, 45,'M', None),
                        (3, 'Emma', 1.75, None, None, None),
                        (4, 'Ashley',1.6, 33,'F', 'Analyst'),
                        (5, 'Olivia', 1.8, 54,'F', 'Teacher'),
                        (6, 'Hannah', 1.82, None, 'F', None),
                        (7, 'William', 1.7, 42,'M', 'Engineer'),
                        (None,None,None,None,None,None),
                        (8,'Ethan',1.55,38,'M','Doctor'),
                        (9,'Hannah',1.65,None,'F','Doctor')]
                       , ['Id', 'Name', 'Height', 'Age', 'Gender', 'Profession'])

#这只显示平均值,但我也需要它旁边的计数。我该怎么做?

df.groupBy("Profession").agg({"Age":"avg"}).show()
df.show()

谢谢。


重复?https://dev59.com/_1gR5IYBdhLWcg3wAJFK#41890813 - David Greenshtein
1个回答

61

对于同一列:

from pyspark.sql import functions as F
df.groupBy("Profession").agg(F.mean('Age'), F.count('Age')).show()

如果您能够使用不同的列:

df.groupBy("Profession").agg({'Age':'avg', 'Gender':'count'}).show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接