【发布时间】:2021-07-29 09:12:12
【问题描述】:
在 PySpark 中,我想在现有表中创建一个新列,用于存储标签为 1 的特定用户的最后 K 个文本。
Example-
Index | user_name | text | label |
0 | u1 | t0 | 0 |
1 | u1 | t1 | 1 |
2 | u2 | t2 | 0 |
3 | u1 | t3 | 1 |
4 | u2 | t4 | 0 |
5 | u2 | t5 | 1 |
6 | u2 | t6 | 1 |
7 | u1 | t7 | 0 |
8 | u1 | t8 | 1 |
9 | u1 | t9 | 0 |
新列(text_list)后面的表应该如下,为每个用户存储最后K=2条消息。
Index | user_name | text | label | text_list |
0 | u1 | t0 | 0 | [] |
1 | u1 | t1 | 1 | [] |
2 | u2 | t2 | 0 | [] |
3 | u1 | t3 | 1 | [t1] |
4 | u2 | t4 | 0 | [] |
5 | u2 | t5 | 1 | [] |
6 | u2 | t6 | 1 | [t5] |
7 | u1 | t7 | 0 | [t3, t1] |
8 | u1 | t8 | 1 | [t3, t1] |
9 | u1 | t9 | 0 | [t8, t3] |
一种天真的方法是循环遍历每一行并为每个用户维护一个队列。但该表可能有数百万行。我们可以在不循环的情况下以更可扩展、更有效的方式做到这一点吗?
【问题讨论】: