агрегируется в дату начала недели (понедельник) за всю неделю - PullRequest
2 голосов
/ 11 июля 2019

Суммируется на дату начала недели (понедельник) за всю неделю.

оконная функция, мы не можем добавить начальный день как понедельник для данных агрегации недели в спарке. или любая работа вокруг этого.

df = spark.createDataFrame([
  ("001", "event1", 10, "2016-05-01 10:50:51"),
  ("002", "event2", 100, "2016-05-02 10:50:53"),
  ("001", "event3", 20, "2016-05-03 10:50:55"),
  ("010", "event3", 20, "2016-05-05 10:50:55"),
  ("001", "event1", 15, "2016-05-01 10:51:50"),
  ("003", "event1", 13, "2016-05-10 10:55:30"),
  ("001", "event2", 12, "2016-05-11 10:57:00"),
  ("001", "event3", 11, "2016-05-21 11:00:01"),
  ("002", "event2", 100, "2016-05-22 10:50:53"),
  ("001", "event3", 20, "2016-05-28 10:50:55"),
  ("001", "event1", 15, "2016-05-30 10:51:50"),
  ("003", "event1", 13, "2016-06-10 10:55:30"),
  ("001", "event2", 12, "2016-06-12 10:57:00"),
  ("001", "event3", 11, "2016-06-14 11:00:01")]).toDF("KEY", "Event_Type", "metric", "Time")

df2 = df.groupBy(window("Time", "7 day")).agg(sum("KEY").alias('aggregate_sum')).select("window.start", "window.end", "aggregate_sum").orderBy("window")

ожидаемый результат должен быть агрегированными данными, начиная с понедельника за неделю. Однако сама искра запускает агрегацию недели на 7 дней с любого дня.

1 Ответ

4 голосов
/ 11 июля 2019

Windows по умолчанию запускается в 1970-01-01, что является четвергом.Вы можете использовать

window("Time", "7 day", startTime="4 days")

, чтобы перевести это на понедельники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...