当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark DataFrame groupBy方法用法及代码示例


PySpark DataFrame 的groupBy(~) 方法根据指定的列聚合行。然后我们可以计算统计数据,例如每个组的平均值。

参数

1.cols | liststringColumn | 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|
+--------+-----------+

按单列分组,计算每组所有列的统计值

要获得每个部门中最高的 agesalary

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|
+-----+--------+----------+---+------+

positiondepartment 进行分组,然后计算每个组的最大值 age

df.groupby(["position", "department"]).max("age").show()



+--------+----------+--------+
|position|department|max(age)|
+--------+----------+--------+
|  junior|        IT|      24|
|  junior|        HR|      22|
|  senior|        IT|      26|
+--------+----------+--------+

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | groupBy method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。