使用pyspark.sql函数计算平均值的正确方法是什么?

问题描述 投票:0回答:1

在pyspark数据框中,我有一系列不同事件的时间序列,我想按月计算事件的平均数。使用pyspark.sql函数执行此操作的正确方法是什么?

我有一种感觉,这需要agg,avg,窗口分区,但我无法使它工作。

我按事件和月份对数据进行了分组,得到了这样的结果:

+------+-----+-----+
| event|month|count|
+------+-----+-----+
|event1|    1| 1023|
|event2|    1| 1009|
|event3|    1| 1002|
|event1|    2| 1012|
|event2|    2| 1023|
|event3|    2| 1017|
|event1|    3| 1033|
|event2|    3| 1011|
|event3|    3| 1004|
+------+-----+-----+

我想拥有的是:

+------+-------------+
| event|avg_per_month|
+------+-------------+
|event1|    1022.6666|
|event2|    1014.3333|
|event3|    1007.6666|
+------+-------------+

完成此任务的正确方法是什么?

pyspark apache-spark-sql aggregate average pyspark-sql
1个回答
1
投票

这应该可以帮助您获得理想的结果 -

df = spark.createDataFrame(
    [('event1',1,1023),
     ('event2',1,1009),
     ('event3',1,1002),
     ('event1',2,1012),
     ('event2',2,1023),
     ('event3',2,1017),
     ('event1',3,1033),
     ('event2',3,1011),
     ('event3',3,1004)
     ],["event", "month", "count"])

Example 1:

df.groupBy("event").\
    avg("count").alias("avg_per_month").\
    show()

Example 2:

df.groupBy("event").\
    agg({'count' : 'avg'}).alias("avg_per_month").\
    show()
© www.soinside.com 2019 - 2024. All rights reserved.