开发者社区> 问答> 正文

我们可以将Chronounit从星期六到星期五配置为每周一次

大多数情况下,每周的所有日历实用程序都在星期日/星期日或星期一/星期一配置。

我想从周六到周五配置它:

假设我每周累计11月份的数据:

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

展开
收起
社区小助手 2018-12-21 10:59:05 1792 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我认为你可以用更简单的方式做到这一点,你只需要在下周五获得并将所有日期汇总到下周五,所以你可以在下周五获得这样的日期:

    val localDate = LocalDate.now() // your date here
    val nextFriday = localDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))
    然后你将在下周五添加一个新列并按其分组并计算总数

    2019-07-17 23:23:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载