pyspark groupBy有多个聚合(如pandas)

时间:2018-04-04 22:26:11

标签: python pandas pyspark pyspark-sql

我对pyspark很新,我试图将我的熊猫代码转换为pyspark。我遇到问题的一件事是汇总我的群组。

这是熊猫代码:

df_trx_m = train1.groupby('CUSTOMER_NUMBER')['trx'].agg(['mean', 'var'])

我在AnalyticsVidhya上看到了这个示例,但我不确定如何将其应用于上述代码:

train.groupby('Age').agg({'Purchase': 'mean'}).show()
Output:
+-----+-----------------+
|  Age|    avg(Purchase)|
+-----+-----------------+
|51-55|9534.808030960236|
|46-50|9208.625697468327|
| 0-17|8933.464640444974|
|36-45|9331.350694917874|
|26-35|9252.690632869888|
|  55+|9336.280459449405|
|18-25|9169.663606261289|
+-----+-----------------+

任何帮助都会得到很多帮助

编辑:

这是另一次尝试:

from pyspark.sql.functions import avg, variance
train1.groupby("CUSTOMER_NUMBER")\
    .agg(
        avg('repatha_trx').alias("repatha_trx_avg"), 
        variance('repatha_trx').alias("repatha_trx_Var")
    )\
    .show(100)

但这只是给我一个空数据帧。

1 个答案:

答案 0 :(得分:3)

您可以导入pyspark functions以执行聚合。

# load function
from pyspark.sql import functions as F

# aggregate data
df_trx_m = train.groupby('Age').agg(
    F.avg(F.col('repatha_trx')).alias('repatha_trx_avg'),
    F.variance(F.col('repatha_trx')).alias('repatha_trx_var')
)

请注意pyspark.sql.functions.variance()会返回填充差异。对于无偏差的样本方差,还有另一个函数pyspark.sql.functions.var_samp()