如何有效地计算pyspark中的平均值和标准差
Posted
技术标签:
【中文标题】如何有效地计算pyspark中的平均值和标准差【英文标题】:How to efficiently calculate average and standard deviation in pyspark 【发布时间】:2020-09-21 12:49:17 【问题描述】:我有一个这样的数据集:
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|
我想计算持续时间列的平均值和标准差,并将这两列添加到输入数据框中。所以最终的df.columns
应该是:date,mean,standdev
假设我应用了df.cache()
并且df
是一个非常大的数据框,我就是这样做的:
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 两次并以更有效的方式完成整个事情?
【问题讨论】:
【参考方案1】:假设您的数据框 df
具有以下架构和行
df.printSchema()
df.show()
您可以在一行中获得所需的用例
df.groupBy('date').agg(F.mean("duration"),F.stddev("duration")).show()
【讨论】:
以上是关于如何有效地计算pyspark中的平均值和标准差的主要内容,如果未能解决你的问题,请参考以下文章