我有一个像这样的数据集:
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`
请帮忙,这样我就可以在一行中计算均值和stddev而不是两次调用df,从而以更有效的方式完成整个操作?