PySpark GroupedData - 链接几种不同的聚合方法

问题描述 投票:0回答:1

我正在 pyspark 中玩

GroupedData

这就是我的环境。

    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /___/ .__/\_,_/_/ /_/\_\   version 3.5.1
          /_/
    
    Using Scala version 2.12.18, OpenJDK 64-Bit Server VM, 11.0.24
    Branch HEAD
  

https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.GroupedData.html

我想知道以下是否可行。

假设我只想使用

GroupedData
的方法,而不从
pyspark.sql.functions
导入任何函数。

好吧,假设我有一些

DataFrame
并且我已经将其按
column A
分组,并且我已经得到了
GroupedData
对象。

现在我想对我的

GroupedData
对象说
sum(column B)
,然后说
avg(column C)
,也许还可以一次或通过链式方法调用来说
min(column D)

我可以仅使用 GroupedData 方法来做到这一点吗?

我问这个问题是因为似乎一旦我完成了

sum(column B)
,我就不再有
GroupedData
对象了,所以我无法继续进一步链接任何
GroupedData
方法。

那么(我的想法)可能吗?
如果可以的话,我们该怎么做呢?

python apache-spark pyspark
1个回答
0
投票

在代码中,他们提供了一些基本示例doc

您可以使用 .agg(sf.sum(df.B).as("sumB"), sf.avg(df.C).as("avgC"))

示例:

from pyspark.sql import functions as sf
from pyspark.sql.functions import pandas_udf, PandasUDFType
df = spark.createDataFrame([(2, "Alice"), (3, "Alice"), (5, "Bob"), (10, "Bob")], ["age", "name"])
df.show()
+---+-----+
|age| name|
+---+-----+
|  2|Alice|
|  3|Alice|
|  5|  Bob|
| 10|  Bob|
+---+-----+

Group-by name, and count each group.

df.groupBy(df.name)
GroupedData[grouping...: [name...], value: [age: bigint, name: string], type: GroupBy]

df.groupBy(df.name).agg({"*": "count"}).sort("name").show()
+-----+--------+
| name|count(1)|
+-----+--------+
|Alice|       2|
|  Bob|       2|
+-----+--------+

Group-by name, and calculate the minimum age.

df.groupBy(df.name).agg(sf.min(df.age)).sort("name").show()
+-----+--------+
| name|min(age)|
+-----+--------+
|Alice|       2|
|  Bob|       5|
+-----+--------+

Same as above but uses pandas UDF.

@pandas_udf('int', PandasUDFType.GROUPED_AGG)  # doctest: +SKIP
def min_udf(v):
    return v.min()
df.groupBy(df.name).agg(min_udf(df.age)).sort("name").show()  # doctest: +SKIP
+-----+------------+
| name|min_udf(age)|
+-----+------------+
|Alice|           2|
|  Bob|           5|
+-----+------------+
© www.soinside.com 2019 - 2024. All rights reserved.