Scala: получите каждую комбинацию за последние 24 месяца - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь сгенерировать DataFrame в Spark (но, может быть, достаточно Scala), в котором у меня есть каждая комбинация последних 24 месяцев, где второй год-месяц всегда> первый год-месяц.

Например, это 1 марта 2019 года на момент написания этой статьи, я после чего-то вроде:

List(
(2017, 3, 2017, 4),
(2017, 3, 2017, 5),
(2017, 3, 2017, 6),
// ..
(2017, 3, 2019, 3),
(2017, 4, 2017, 5),
// ..
(2019, 1, 2019, 3),
(2019, 2, 2019, 3),
)

1 Ответ

0 голосов
/ 01 марта 2019

Это проще всего сделать с чистым Scala без привлечения Spark.Сначала вычислите список всех (год, месяц) кортежей за последние 24 месяца.Это можно сделать с помощью java.time и потока следующим образом:

import java.time.LocalDate

val numMonths = 24
val now = LocalDate.now()
val startTime = now.minusMonths(numMonths)

lazy val dateStream: Stream[LocalDate] = startTime #:: dateStream.map(_.plusMonths(1))
val dates = dateStream.take(numMonths + 1).toSeq.map(t => (t.getYear(), t.getMonth().getValue()))

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

val datePerms = dates.combinations(2).map(c => (c(0)._1, c(0)._2, c(1)._1, c(1)._2))

Вы можете легко преобразовать это в массив данных при помощи метода toDF, если необходимо.

...