汇总特定时差的所有先前行

时间:2017-12-10 12:55:44

标签: scala apache-spark

我有一个带有以下条目的Spark DataFrame:

| order id | time             | amt |
| 1        | 2017-10-01 12:00 | 100 |
| 2        | 2017-10-01 15:00 | 100 |
| 3        | 2017-10-01 17:00 | 100 |
| 4        | 2017-10-02 16:00 | 100 |
| 5        | 2017-10-02 23:00 | 100 |

我想添加一列amount_prev_24h,对于每个order id,其中包含过去24小时内所有订单的amt总和。

| order id | time             | amt | amt_24h
| 1        | 2017-10-01 12:00 | 100 | 0       
| 2        | 2017-10-01 15:00 | 100 | 100
| 3        | 2017-10-01 17:00 | 100 | 200
| 4        | 2017-10-02 16:00 | 100 | 100
| 5        | 2017-10-02 23:00 | 100 | 100

我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

这是一个pyspark代码,类似于scala API。

df = df.withColumn('time_uts', unix_timestamp('time', format='yyyy-MM-dd HH:mm'))
df = df.withColumn('amt_24h', sum('amt').over(Window.orderBy('time_uts').rangeBetween(-24 * 3600, -1))).fillna(0, subset='amt_24h')

我希望这对你有所帮助。