Как правильно рассчитать среднее значение с помощью функций pyspark.sql? - PullRequest
0 голосов
/ 09 апреля 2019

В фрейме данных pyspark у меня есть ряд различных событий, и я хочу вычислить среднее количество событий по месяцам. Как правильно сделать это, используя функции pyspark.sql?

У меня такое ощущение, что для этого требуется agg , avg , window , но я не смог заставить его работать.

Я сгруппировал данные по событию и месяцу и получил что-то вроде этого:

+------+-----+-----+
| 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|
+------+-------------+

Как правильно это сделать?

1 Ответ

1 голос
/ 09 апреля 2019

Это должно помочь вам получить желаемый результат -

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:

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

Пример 2:

df.groupBy("event").\
    agg({'count' : 'avg'}).alias("avg_per_month").\
    show()
...