【发布时间】:2019-08-02 14:31:54
【问题描述】:
有一个表格存储了用户听音乐的时间,如下所示:
+-------+-------+---------------------+
| user | music | listen_time |
+-------+-------+---------------------+
| A | m | 2019-07-01 16:00:00 |
+-------+-------+---------------------+
| A | n | 2019-07-01 16:05:00 |
+-------+-------+---------------------+
| A | x | 2019-07-01 16:10:00 |
+-------+-------+---------------------+
| A | y | 2019-07-01 17:10:00 |
+-------+-------+---------------------+
| A | z | 2019-07-02 18:10:00 |
+-------+-------+---------------------+
| A | m | 2019-07-02 18:15:00 |
+-------+-------+---------------------+
| B | t | 2019-07-02 18:15:00 |
+-------+-------+---------------------+
| B | s | 2019-07-02 18:20:00 |
+-------+-------+---------------------+
计算结果应该是每个用户听过的间隔小于30分钟的音乐列表,应该是这样的(music_list应该是ArrayType列):
+-------+------------+
| user | music_list |
+-------+------------+
| A | m, n, x |
+-------+------------+
| A | y |
+-------+------------+
| A | z, m |
+-------+------------+
| B | t, s |
+-------+------------+
我怎么可能在 scala spark 数据帧中实现它?
【问题讨论】:
-
你的数据框架构是什么?
-
@JackieLam 如果用户在
4:00、4:05、4:30、4:35听音乐会发生什么?第一组应该包括35个吗?在第二个? -
@BlueSheepToken 当然,因为它距离 4:30 仅 5 分钟
-
好的,这可以通过滞后和累积总和来完成。我会在星期一写一个答案
-
@JackieLam,这对你有帮助吗?如果是,请毫不犹豫地接受答案
标签: scala apache-spark apache-spark-sql