美文网首页
3.pyspark.sql.GroupedData

3.pyspark.sql.GroupedData

作者: 丫丫iii | 来源:发表于2019-01-23 11:07 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/ixhjjqtx.html