由DataFrame.groupBy()创建的DataFrame上的一组聚合方法。
6.1 agg(*exprs)
计算聚合并将结果作为DataFrame返回。
可用的集合函数是avg,max,min,sum,count。
如果exprs是从字符串到字符串的单个字典映射,那么键是要执行聚合的列,值是聚合函数。
另外,exprs也可以是聚合列表达式的列表。
参数:●exprs – 从列名(字符串)到聚集函数(字符串)的字典映射或列的列表。
tmp = df.groupBy(df.name)
tmp.agg({"*":"count"}).collect()
from pyspark.sql import functions as F
tmp.agg(F.min(df.age)).collect()
6.2 avg(*args)
计算每个组的每个数字列的平均值。
mean()是avg()的别名。
参数:●cols – 列名称列表(字符串),非数字列被忽略。
df.groupBy().avg('age').collect()
6.3 count()
统计每个组的记录数。
df.groupBy(df.age).count().collect()
6.4 max(*args)
计算每个组的每个数字列的最大值。
df.groupBy().max('age').collect()
6.5 mean(*args)
计算每个组的每个数字列的平均值。
mean()是avg()的别名。
参数:●cols – 列名称列表(字符串),非数字列被忽略。
df.groupBy().mean('age').collect()
6.6 min(*args)
计算每个组的每个数字列的最小值。
参数:●cols– 列名称列表(字符串),非数字列被忽略。
df.groupBy().min('age').collect()
6.7 pivot(pivot_col, values=None)
旋转当前[[DataFrame]]的列并执行指定的聚合。 有两个版本的透视函数:一个需要调用者指定不同值的列表以进行透视,另一个不需要。 后者更简洁但效率更低,因为Spark需要首先在内部计算不同值的列表。
参数:●pivot_col – 要旋转的列的名称。
●values – 将被转换为输出DataFrame中的列的值的列表。
// 计算每个课程每年的收入总和作为一个单独的列
In [381]: l4=[(2012,'dotNET',10000),(2012,'dotNET',5000),(2012,'Java',20000),(2013,'dotNET',48000),(
...: 2013,'Java',30000),(2012,'c',9999)]
In [382]: df4 = sqlContext.createDataFrame(l4,['year','course','earnings'])
In [383]: df4.groupBy("year").pivot("course", ["dotNET", "Java"]).sum("earnings").collect()
Out[383]:
[Row(year=2012, dotNET=15000, Java=20000),
Row(year=2013, dotNET=48000, Java=30000)]
# 无值型
In [384]: df4.groupBy("year").pivot("course").sum("earnings").collect()
Out[384]:
[Row(year=2012, Java=20000, c=9999, dotNET=15000),
Row(year=2013, Java=30000, c=None, dotNET=48000)]
6.8 sum(*args)
计算每个组的每个数字列的总和。
参数:● cols – 列名称列表(字符串),非数字列被忽略。
df.groupBy().sum('age').collect()