备用行之间的聚合时间

时间:2016-08-10 15:19:14

标签: python apache-spark pyspark

我的数据集大小约为200KB。我已清理数据并将其加载到Spark中的RDD(使用pyspark),以便标题格式如下:

Employee ID | Timestamp (MM/DD/YYYY HH:MM) | Location

此数据集存储员工盖章和剔除时间,我需要累计他们在工作中花费的时间。假设行的格式是干净的并且严格交替(所以盖章,盖章,盖章,盖章等),有没有办法聚合Spark花费的时间?

我已经尝试在所有“标记”值中使用过滤器,并将时间与行之后的值直接聚合(所以r + 1),但事实证明这是非常难以提及的。我认为用java或python这样的语言会很简单,但在切换之前我错过了一个可以在Spark中实现的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用窗口函数lead

from pyspark.sql import Window
from pyspark.sql.functions import *

window = Window.partitionBy("id").orderBy("timestamp")
newDf = df.withColumn("stampOut", lead("timestamp", 1).over(window)).where(col("stampOut").isNotNull())

finalDf = newDf.select(col("id"), col("stampOut") - col("timestamp"))