【问题标题】:Scala: Get every combination of the last 24 monthsScala:获取过去 24 个月的所有组合
【发布时间】:2019-03-01 20:28:20
【问题描述】:

我正在尝试在 Spark 中生成一个 DataFrame(但也许只有 Scala 就足够了),其中我拥有过去 24 个月的所有组合,其中第二年月总是 > 第一年月。

例如,写这篇文章时是 2019 年 3 月 1 日,我想要的是:

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),
)

【问题讨论】:

  • 你能列出过去 2 年的每个月吗?

标签: scala apache-spark combinations


【解决方案1】:

在不涉及 Spark 的情况下,使用纯 Scala 最容易做到这一点。首先,计算过去 24 个月的所有(年、月)元组的列表。这可以通过使用java.time 和 Stream 来完成,如下所示:

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 方法轻松地将其转换为数据框。

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多