我的数据集大小约为200KB。我已清理数据并将其加载到Spark中的RDD(使用pyspark),以便标题格式如下:
Employee ID | Timestamp (MM/DD/YYYY HH:MM) | Location
此数据集存储员工盖章和剔除时间,我需要累计他们在工作中花费的时间。假设行的格式是干净的并且严格交替(所以盖章,盖章,盖章,盖章等),有没有办法聚合Spark花费的时间?
我已经尝试在所有“标记”值中使用过滤器,并将时间与行之后的值直接聚合(所以r + 1),但事实证明这是非常难以提及的。我认为用java或python这样的语言会很简单,但在切换之前我错过了一个可以在Spark中实现的解决方案?
答案 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"))