使用pyspark.sql函数计算平均值的正确方法是什么?
在pyspark dataframe中,我有一个不同事件的时间序列,我想按月计算事件的平均计数。使用pyspark.sql函数的正确方法是什么 我有一种感觉,这需要agg、avg和窗口分区,但我无法让它工作 我按事件和月份对数据进行了分组,得到如下结果:使用pyspark.sql函数计算平均值的正确方法是什么?,pyspark,apache-spark-sql,aggregate,average,pyspark-sql,Pyspark,Apache Spark Sql,Aggregate,Average,Pyspark Sql,在pyspark dataframe中,我有一个不同事件的时间序列,我想按月计算事件的平均计数。使用pyspark.sql函数的正确方法是什么 我有一种感觉,这需要agg、avg和窗口分区,但我无法让它工作 我按事件和月份对数据进行了分组,得到如下结果: +------+-----+-----+ | event|month|count| +------+-----+-----+ |event1| 1| 1023| |event2| 1| 1009| |event3| 1| 10
+------+-----+-----+
| 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|
+------+-------------+
实现这一目标的正确方法是什么?这将帮助您获得所需的结果-
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"])
例1:
例2:
df.groupBy("event").\
avg("count").alias("avg_per_month").\
show()
df.groupBy("event").\
agg({'count' : 'avg'}).alias("avg_per_month").\
show()