Spark]Sparkデータフレームの主な方法-(3)Group By


GroupByメソッド


サマリ
  • パンダDataFrameはグループのDataFrame Group Byオブジェクト
  • を返します.
  • Spark Data Frameも、パケット・データ・オブジェクトを返した後に集約メソッドを適用します.
  • パンダDataFrameGroup ByとSpark GroupedDataはagg()メソッドを使用して異なるカラムに異なる集約関数
  • を適用する.
  • Spark Group By()はPanda Group by()の特徴とSQLの特徴を有する.
  • a.基本的な使い方

  • 組By内使用後count、min、max、avg、sum等
  • を使用する.
  • ソートorderByメソッドを使用してパケットデータをソート
  • 集約メソッドにパラメータのカラム名(最大「age」)
  • を入力します.
    グループByが
  • の複数の列である場合、単一の列名またはリスト形式の
  • を入力する.
    # 기본 사용법
    titanic_sdf.groupBy('Pclass').count().show() 
    
    # 정렬 
    titanic_sdf.groupBy('Pclass').count().orderBy('count', ascending=False).show()
    
    # 메서드 내부에 인자로 컬럼명 입력
    titanic_sdf.groupBy('Pclass').max('Age').show()
    
    # 여러 컬럼에 적용
    titanic_sdf.groupBy('Pclass', 'Sex').max('Age').show()
    titanic_sdf.groupBy(['Pclass', 'Sex']).max('Age').show()

    b.注意事項

  • count()ではなく集約方法を適用する場合、aggは列全体に適用され、ファンダスと同様に適用される.
  • パケットデータから集約メソッドを呼び出す場合、文字列列名のみが使用されます.
  • c.agg()方法

  • agg()は、異なる集約方法を各列
  • により容易に適用することができる.
  • 単一集約関数の結果、カラムに別名(「新規カラム名」)
  • を追加できます.
  • の結果にフィルタ()を適用し、SQLと同じ機能
  • を実現する.
    # 호출 
    from pyspark.sql.functions import max, avg, sum, min
    
    # 여러 컬럼에 서로 다른 aggregation 적용
    titanic_sdf.groupBy('Pclass').agg(
    	max('Age'), min('Age'), sum('Age'), avg('Age')
        ).show()
    
    # 별명 (alias) 부여 
    titanic_sdf.groupBy('Pclass').agg(
        max(col('Age')).alias('max_age'), min('Age').alias('min_age'), \
        sum('Age').alias('sum_age'), avg('Age').alias('avg_age') \
        ).show()
        
    # ** filter() 사용
    titanic_sdf.groupBy('Pclass').agg(
    	max(col('Age')).alias('max_age'), min('Age').alias('min_age') , \
        sum('Age').alias('sum_age'), avg('Age').alias('avg_age') \
        ).filter(col('max_age') > 70).show()
  • **フィルタ()を使用した結果は、SQLで表示できます:
  • select max_age, min_age, sum_avg, avg_age 
    from (
          select max(age) as max_age
          	   , min(age) as min_age
               , sum(age) as sum_age
               , avg(age) as avg_age 
          from titanic_sdf 
          group by pclass
    ) where max_age > 70