📜  Pyspark – 多列聚合(1)

📅  最后修改于: 2023-12-03 15:18:51.373000             🧑  作者: Mango

Pyspark – 多列聚合

在Pyspark中,我们可以使用聚合功能对多个列进行操作。例如,我们可以计算每个组的平均值和中位数,同时也可以计算每个组中多个列的总和。

本文将介绍如何使用Pyspark对多个列进行聚合,并提供一些示例代码。

聚合多个列并计算平均值
from pyspark.sql.functions import avg

df.groupBy(['group', 'year']).agg(avg('value1'), avg('value2')).show()

上述代码首先按groupyear列对数据框进行分组,然后使用agg函数对value1value2列进行平均值计算。

聚合多个列并计算中位数
from pyspark.sql.functions import percentile_approx

df.groupBy(['group', 'year']).agg(percentile_approx('value1', 0.5), percentile_approx('value2', 0.5)).show()

上述代码同样按groupyear列对数据框进行分组,然后使用agg函数对value1value2列进行中位数计算。

聚合多个列并计算总和
from pyspark.sql.functions import sum

df.groupBy(['group', 'year']).agg(sum('value1'), sum('value2')).show()

上述代码按groupyear列对数据框进行分组,并使用agg函数对value1value2列进行总和计算。

聚合多个列并使用自定义函数计算
from pyspark.sql.functions import udf
from pyspark.sql.types import DoubleType

def custom_function(x, y):
    return x * y

udf_custom_function = udf(custom_function, DoubleType())

df.withColumn('value3', udf_custom_function('value1', 'value2'))\
    .groupBy(['group', 'year']).agg(sum('value1'), sum('value2'), sum('value3')).show()

上述代码定义了一个自定义函数custom_function,该函数接受两个参数xy并将它们相乘。然后将该函数转换为UDF类型,并使用该UDF类型计算新列value3。最后,按groupyear列对数据框进行分组,并使用agg函数对value1value2value3列进行总和计算。

总的来说,Pyspark提供了许多用于对多个列进行聚合操作的函数,使得数据处理变得更加灵活和高效。以上代码提供了一些示例,希望对你有所帮助!