【发布时间】:2017-05-23 11:31:24
【问题描述】:
我有一个包含日志的 Pyspark 数据框,每一行对应于记录时系统的状态,以及一个组号。我想找出每个组处于不健康状态的时间段的长度。
例如,如果这是我的桌子:
TIMESTAMP | STATUS_CODE | GROUP_NUMBER
--------------------------------------
02:03:11 | healthy | 000001
02:03:04 | healthy | 000001
02:03:03 | unhealthy | 000001
02:03:00 | unhealthy | 000001
02:02:58 | healthy | 000008
02:02:57 | healthy | 000008
02:02:55 | unhealthy | 000001
02:02:54 | healthy | 000001
02:02:50 | healthy | 000007
02:02:48 | healthy | 000004
我想返回组 000001,其不正常的时间段为 9 秒(从 02:02:55 到 02:03:04)。
其他组也可能有不健康的时间段,我也想退回这些时间段。
由于具有相同状态的连续行的可能性,并且由于不同组的行穿插,我正在努力寻找一种有效地做到这一点的方法。
我无法将 Pyspark 数据帧转换为 Pandas 数据帧,因为它太大了。
如何有效地确定这些时间段的长度?
非常感谢!
【问题讨论】:
-
发布的解决方案是否有效?
-
@rogue-one - 谢谢,你的实现解释得很好,很详细!走在台阶上,显得颇为精明灵动。对此的扩展 - 有没有办法获取组处于不健康状态的每个时间段的长度(例如,如果组 000001 有多个不健康状态的时间段,则返回每个时间段的长度)?
-
如果你在我的查询中没有 sum 和 group by 的
t2.timestamp_value - t1.timestamp_value,你应该能够得到持续时间..
标签: apache-spark pyspark apache-spark-sql spark-dataframe pyspark-sql