PySpark DataFrame 的groupBy(~)
方法根据指定的列聚合行。然后我们可以计算统计数据,例如每个组的平均值。
参数
1.cols
| list
或 string
或 Column
| optional
分组依据的列。默认情况下,所有行将分组在一起。
返回值
GroupedData
对象 (pyspark.sql.group.GroupedData
)。
例子
考虑以下PySpark DataFrame:
df = spark.createDataFrame([["Alex", "IT", 20, 500],\
["Bob", "IT", 24, 400],\
["Cathy", "HR", 22, 600]],\
["name", "department", "age", "salary"])
df.show()
+-----+----------+---+------+
| name|department|age|salary|
+-----+----------+---+------+
| Alex| IT| 20| 500|
| Bob| IT| 24| 400|
|Cathy| HR| 22| 600|
+-----+----------+---+------+
基本用法
默认情况下,不带任何参数的 groupBy()
会将所有行分组在一起,并将计算每个数字列的统计信息:
df.groupby().max().show()
+--------+-----------+
|max(age)|max(salary)|
+--------+-----------+
| 24| 600|
+--------+-----------+
按单列分组,计算每组所有列的统计值
要获得每个部门中最高的 age
和 salary
:
df.groupBy("department").max().show()
+----------+--------+-----------+
|department|max(age)|max(salary)|
+----------+--------+-----------+
| IT| 24| 500|
| HR| 22| 600|
+----------+--------+-----------+
我们还可以使用 SQL.functions.col(~)
,而不是通过标签(string
)引用列:
from pyspark.sql import functions as F
df.groupby(F.col("department")).max().show()
+----------+--------+-----------+
|department|max(age)|max(salary)|
+----------+--------+-----------+
| IT| 24| 500|
| HR| 22| 600|
+----------+--------+-----------+
按单列分组并计算每组特定列的统计数据
仅获取最高的 age
而不是所有数字列:
df.groupby("department").max("age").show()
+----------+--------+
|department|max(age)|
+----------+--------+
| IT| 24|
| HR| 22|
+----------+--------+
同样,我们可以使用 agg(~)
方法并使用 SQL.functions
' 聚合函数之一:
df.groupby("department").agg(F.max("age")).show()
+----------+--------+
|department|max(age)|
+----------+--------+
| IT| 24|
| HR| 22|
+----------+--------+
注意
PySpark 支持以下聚合函数:
agg, avg, count, max, mean, min, pivot, sum
使用聚合列的别名进行分组
默认情况下,计算每个组的最大值 age
将得到列标签 max(age)
:
df.groupby("department").max("age").show()
+----------+--------+
|department|max(age)|
+----------+--------+
| IT| 24|
| HR| 22|
+----------+--------+
要使用别名,我们需要使用函数agg(~)
:
import pyspark.sql.functions as F
df.groupby("department").agg(F.max("age").alias("max_age")).show()
+----------+-------+
|department|max_age|
+----------+-------+
| IT| 24|
| HR| 22|
+----------+-------+
分组和计算多个统计数据
要一次计算多个统计数据:
import pyspark.sql.functions as F
df.groupby("department").agg(F.max("age").alias("max"), F.min("age"), F.avg("salary")).show()
+----------+--------+--------+-----------------+
|department| max|min(age)| avg(salary)|
+----------+--------+--------+-----------------+
| IT| 26| 20|566.6666666666666|
| HR| 22| 22| 600.0|
+----------+--------+--------+-----------------+
多列分组并计算统计
考虑以下PySpark DataFrame:
df = spark.createDataFrame([["Alex", "junior", "IT", 20, 500],\
["Bob", "junior", "IT", 24, 400],\
["Cathy", "junior", "HR", 22, 600],\
["Doge", "senior", "IT", 26, 800]],\
["name", "position", "department", "age", "salary"])
df.show()
+-----+--------+----------+---+------+
| name|position|department|age|salary|
+-----+--------+----------+---+------+
| Alex| junior| IT| 20| 500|
| Bob| junior| IT| 24| 400|
|Cathy| junior| HR| 22| 600|
| Doge| senior| IT| 26| 800|
+-----+--------+----------+---+------+
按 position
和 department
进行分组,然后计算每个组的最大值 age
:
df.groupby(["position", "department"]).max("age").show()
+--------+----------+--------+
|position|department|max(age)|
+--------+----------+--------+
| junior| IT| 24|
| junior| HR| 22|
| senior| IT| 26|
+--------+----------+--------+
相关用法
- Python Pandas DataFrame groupby方法用法及代码示例
- Python Pandas DataFrame gt方法用法及代码示例
- Python Pandas DataFrame get方法用法及代码示例
- Python Pandas DataFrame ge方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
- Python Pandas DataFrame pow方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame lt方法用法及代码示例
- Python Pandas DataFrame all方法用法及代码示例
- Python Pandas DataFrame unstack方法用法及代码示例
- Python Pandas DataFrame mean方法用法及代码示例
- Python PySpark DataFrame filter方法用法及代码示例
- Python Pandas DataFrame tz_convert方法用法及代码示例
- Python Pandas DataFrame isin方法用法及代码示例
- Python PySpark DataFrame collect方法用法及代码示例
- Python PySpark DataFrame intersect方法用法及代码示例
- Python PySpark DataFrame dtypes属性用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | groupBy method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。