【发布时间】:2018-10-20 05:29:08
【问题描述】:
我正在尝试计算给定的order_id 在过去 365 天内有多少订单已付款。这不是问题所在:我使用window function。
对我来说比较棘手的地方是:我不想在当前order_id 的order_date 之后的payment_date 之后计算订单。
目前,我有这样的事情:
val window: WindowSpec = Window
.partitionBy("customer_id")
.orderBy("order_date")
.rangeBetween(-365*days, -1)
和
df.withColumn("paid_order_count", count("*") over window)
这将计算客户当前订单前 365 天内的所有订单。
我现在如何合并一个将当前订单的order_date 考虑在内的计数条件?
例子:
+---------+-----------+-------------+------------+
|order_id |order_date |payment_date |customer_id |
+---------+-----------+-------------+------------+
|1 |2017-01-01 |2017-01-10 |A |
|2 |2017-02-01 |2017-02-10 |A |
|3 |2017-02-02 |2017-02-20 |A |
结果表应如下所示:
+---------+-----------+-------------+------------+-----------------+
|order_id |order_date |payment_date |customer_id |paid_order_count |
+---------+-----------+-------------+------------+-----------------+
|1 |2017-01-01 |2017-01-10 |A |0 |
|2 |2017-02-01 |2017-02-10 |A |1 |
|3 |2017-02-02 |2017-02-20 |A |1 |
对于order_id = 3,paid_order_count 不应该是2,而是1,因为order_id = 2 是在放置order_id = 3 之后支付的。
希望我能很好地解释我的问题,期待你的想法!
【问题讨论】:
-
所以你只想要每个订单日期的累积计数基于付款日期?
标签: scala apache-spark apache-spark-sql