3.pyspark.sql.GroupedData

Spark SQL和DataFrames重要的类有:

  • pyspark.sql.SQLContext: DataFrame和SQL方法的主入口
  • pyspark.sql.DataFrame: 将分布式数据集分组到指定列名的数据框中
  • pyspark.sql.Column :DataFrame中的列
  • pyspark.sql.Row: DataFrame数据的行
  • pyspark.sql.HiveContext: 访问Hive数据的主入口
  • pyspark.sql.GroupedData: 由DataFrame.groupBy()创建的聚合方法集
  • pyspark.sql.DataFrameNaFunctions: 处理丢失数据(空数据)的方法
  • pyspark.sql.DataFrameStatFunctions: 统计功能的方法
    -pyspark.sql.functions DataFrame:可用的内置函数
  • pyspark.sql.types: 可用的数据类型列表
  • pyspark.sql.Window: 用于处理窗口函数

3.class pyspark.sql.GroupedData(jdf,sql_ctx):由DataFrame.groupBy()创建的DataFrame上的一组聚合方法。

3.1.agg(*exprs):计算聚合并将结果作为DataFrame返回,可用的聚合函数有avg,min,max,sum,count.如果exprs是从字符串到字符串的单个字典映射,那么键是要执行聚合的列,值是聚合函数。另外,exprs也可以是聚合列表达式的列表
gdf = df.GroupBy(df.name)
gdf.agg({'*':count'}).collect()
[Row(name=u'Alice', count(1)=1), Row(name=u'Bob', count(1)=1)]

from pyspark.sql import function as F
gdf.agg(G.min(df.age).collect())
[Row(name=u'Alice', min(age)=2), Row(name=u'Bob', min(age)=5)]
3.2.avg(*exprs):计算每个组的每个数字的列的平均值,mean()是avg()的别名。
>> l=[('Alice',2),('Bob',5)]
>>> df = sqlContext.createDataFrame(l,['name','age'])
>>> df.groupBy().avg('age').collect()
[Row(avg(age)=3.5)]
>>> l3=[('Alice',2,85),('Bob',5,80)]
>>> df3 = sqlContext.createDataFrame(l3,['name','age','height'])
>>> df3.groupBy().avg('age', 'height').collect()
[Row(avg(age)=3.5, avg(height)=82.5)]
3.3.count(*exprs):统计每个组的记录数。
>>> df.groupBy(df.age).count().collect()
[Row(age=2, count=1), Row(age=5, count=1)] 
3.4.max(*exprs):计算每个组的每个数字列的最大值。
>>> df.groupBy().max('age').collect()
[Row(max(age)=5)]
>>> df3.groupBy().max('age', 'height').collect()
[Row(max(age)=5, max(height)=85)]
3.5.mean(*exprs):计算每个组的每个数字列的平均值。mean()是avg()的别名。
3.6.min(*exprs):计算每个组的每个数字列的最小值。
>>> df.groupBy().min('age').collect()
[Row(min(age)=2)]
>>> df3.groupBy().min('age', 'height').collect()
[Row(min(age)=2, min(height)=80)]
3.7.pivot(pivot_col,value=None): 旋转当前DataFrame的列并执行指定的聚合。有两个版本的透视函数:一个需要调用者指定不同值的列表以进行透视,另一个不需要。后者更简洁但效率低,因为spark需要首先在内部计算不同值的列表。
1.pivot_col:要旋转的列的名称
2.values:将被旋转为输出DataFrame中的列表值的列表
// 计算每个课程每年的收入总和作为一个单独的列
>>> l4=[(2012,'dotNET',10000),(2012,'dotNET',5000),(2012,'Java',20000),(2013,'dotNET',48000),(2013,'Java',30000)]
>>> df4 = sqlContext.createDataFrame(l4,['year','course','earnings'])
>>> df4.groupBy("year").pivot("course", ["dotNET", "Java"]).sum("earnings").collect() 
[Row(year=2012, dotNET=15000, Java=20000), Row(year=2013, dotNET=48000, Java=30000)]
// 或者不指定列值(效率较低)
>>> df4.groupBy("year").pivot("course").sum("earnings").collect() 
[Row(year=2012, Java=20000, dotNET=15000), Row(year=2013, Java=30000, dotNET=48000)]
3.6.sum(*exprs):计算每个组的每个数字列的总和。
>>> df.groupBy().sum('age').collect()
[Row(sum(age)=7)]
>>> df3.groupBy().sum('age', 'height').collect()
[Row(sum(age)=7, sum(height)=165)]

你可能感兴趣的:(3.pyspark.sql.GroupedData)