Можем ли мы настроить Chronounit для планирования недели с субботы на пятницу? - PullRequest
0 голосов
/ 16 декабря 2018

В основном все утилиты для работы с календарями на неделю настроены на воскресенье / воскресенье или понедельник / понедельник.

Я хочу настроить его с субботы на пятницу:

предположим, у меня есть накопленные данные за ноябрьмесяц на еженедельной основе:

var sample = Seq(("C1", "01/11/2018", 20), ("C1", "02/11/2018", 5),
  ("C1", "03/11/2018", 2), ("C1", "04/11/2018", 3), ("C1", "05/11/2018", 5),
  ("C1", "08/11/2018", 5), ("C1", "10/11/2018", 10), ("C1", "12/11/2018", 10),
  ("C1", "14/11/2018", 16), ("C1", "15/11/2018", 6), ("C1", "18/11/2018", 22)).toDF("id", "order_date", "orders")


sample = sample.withColumn(
  "order_date",
  to_date(unix_timestamp($"order_date", "dd/MM/yyyy").cast("timestamp")))

val Row(start: java.sql.Date, end: java.sql.Date) = sample.
  select(min($"order_date"), max($"order_date")).
  first

val weeksDF = (0L to ChronoUnit.WEEKS.between(
  start.toLocalDate, end.toLocalDate)).
  map(i => java.sql.Date.valueOf(start.toLocalDate.plusWeeks(i))).
  toDF("order_date")



Desired Output: 

02/11/2018  25
09/11/2018  15
16/11/2018  42
23/11/2018  22

ранняя помощь очень ценится.

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, что вы можете сделать это более простым способом, вам нужно всего лишь получить следующую пятницу и агрегировать все даты до следующей пятницы, чтобы вы могли получить следующую пятницу для каждой даты, например:

val localDate = LocalDate.now() // your date here
val nextFriday = localDate.`with`(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))

затем вы добавите новый столбец со следующей пятницей и сгруппируете его по сумме

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