对数据分析时,通常需要对数据进行分组,并对每个分组进行聚合运算。在一定意义上,窗口也是一种分组统计的方法。
分组数据
DataFrame.groupBy()返回的是GroupedData类,可以对分组数据应用聚合函数、apply()函数和pivot()函数。
常用的聚合函数是:
- count():统计数量
- mean(*cols), avg(*cols):计算均值
- max(*cols),min(*cols):计算最大值和最小值
- sum(*cols):计算累加和
举个例子,对DataFrame计算最大的age和height列的值:
df.groupBy().max('age', 'height').collect()
一,聚合函数
对于聚合函数,还可以使用pandas中的函数,这需要使用GroupedData类的agg(*exprs)函数,该函数的作用是计算聚合值,并返回DataFrame对象。
可以用于agg()函数中的聚合函数主要分为两类:
- 内置的聚合函数:avg, max, min, sum, count
- 分组聚合的pandas UDF:pyspark.sql.functions.pandas_udf()
对于内置的聚合函数,可以通过pyspark.sql.functions来导入:
gdf = df.groupBy(df.name)
from pyspark.sql import functions as F
sorted(gdf.agg(F.min(df.age)).collect())
#[Row(name='Alice', min(age)=2), Row(name='Bob', min(age)=5)]
这里重点介绍如何创建一个pandas UDF,Pandas UDF由Spark使用Arrow来传输数据,并通过Pandas对数据进行矢量化操作。在创建Pandas UDF时,需要通过pandas_udf作为修饰器或包装函数。
pyspark.sql.functions.pandas_udf(f=None,