如何有效地计算pyspark中的平均值和标准差

t9aqgxwy  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(1128)

我有这样一个数据集:

df
+-----------------+---------+----------+---+
|part-id     |    msgid| date     |duration|
+-----------------+---------+----------+---
|RDZ0L2227686|      743|2020-07-02|    2593|
|RDZ0L2227686|      734|2020-07-01|       4|
|RDZ0L2227687|      742|2020-07-02|       3|
|RDZ0L2227687|      737|2020-07-02|     669|
|RDZ0L2227687|      738|2020-07-02|    1099|
|RDZ0L2227687|      733|2020-07-01|      50|
|RDZ0L2227688|      740|2020-07-02|    5924|
|JTZ0L2227688|      741|2020-07-02|    8199|
|JTZ0L2227688|      739|2020-07-02|     190|
|RDZ0L2227688|      736|2020-07-02|    1841|
|RDZ0L2227689|      735|2020-07-02|    2173|
|JTZ0L2227686|      744|2020-07-02|     482|

我想计算duration列的平均值和标准差,并将这两列添加到输入Dataframe中。所以是最终的 df.columns 应该是: date,mean,standdev 假设我申请了,我就是这么做的 df.cache() 以及 df 是一个非常大的Dataframe:

df1 =   df.groupBy('date').agg(F.mean("duration")).agg(F.stddev("duration"))
df2 =   df.groupBy('date').agg(F.mean("duration")).agg(F.mean("duration"))
df3 =  join(df1,df2) on date #columns `date,mean,stddev`

df = join(df,df3) on date #columns `date,mean,stddev`

你能帮我一个忙吗?这样我就可以在一行中计算出平均值和标准差,而不是两次调用df,并以更有效的方式完成整个过程?

k10s72fa

k10s72fa1#

假设您使用Dataframe df 使用以下架构和行

df.printSchema()
df.show()


您可以在一行中获得所需的用例

df.groupBy('date').agg(F.mean("duration"),F.stddev("duration")).show()

相关问题