在Spark中每次出现值之前获取X行

时间:2018-05-15 16:20:22

标签: pyspark apache-spark-sql

我对Spark很陌生,而且我遇到了一些概念上的障碍。我正在寻找有关如何解决这个问题的一般想法:

我有一些这种形式的日志数据 -

+-------------+--------------------+----+----------+
|serial_number|           timestamp|code|fault_type|
+-------------+--------------------+----+----------+
|       633878|2017-12-11 01:45:...|   1|     STATE|
|       633833|2017-12-11 01:45:...|   3|     STATE|
|       633745|2017-12-11 01:45:...| 306|     STATE|
|       633747|2017-12-11 01:46:...|   1|     STATE|
|       634039|2017-12-11 01:46:...|   4|     STATE|
|       633833|2017-12-11 01:46:...|   1|     STATE|
|       637480|2017-12-11 01:46:...|   1|     STATE|
|       634029|2017-12-11 01:46:...|   3|     STATE|
|       634046|2017-12-11 01:46:...|   3|     STATE|
|       634039|2017-12-11 01:46:...|   1|     STATE|

有时,fault_type将等于QUIT,而不是STATE。我在Spark中寻找一种方法来选择QUIT错误之前的X个记录,并创建这些选定数据块的数据帧,其中每一行可以是QUIT之前的X个代码列表。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我会将您的数据框加入到自身。

在左侧,选择所有故障类型为QUIT的事件,在右侧选择所有前面的事件(时间戳小于),按时间排序并使用限制。 然后,您可以按左侧的记录进行分组,并对右侧的记录执行collect_list