大家好,我想对以下数据集使用窗口操作。
|task|startTime|EndTime|workTime|value|conditionValue|
|----|---------|-------|--------|-----|--------------|
|T1 |1200 |1900 |1000 |0 |15 |
|T1 |1200 |1900 |1100 |0 |15 |
|T1 |1200 |1900 |1200 |0 |15 |
|T1 |1200 |1900 |1300 |0 |15 |
|T1 |1200 |1900 |1400 |0 |15 |
|T1 |1200 |1900 |1500 |0 |15 |
|T1 |1200 |1900 |1600 |0 |15 |
|T1 |1200 |1900 |1700 |0 |15 |
|T1 |1200 |1900 |1800 |0 |15 |
|T1 |1200 |1900 |1900 |0 |15 |
|T1 |1200 |1900 |2000 |0 |15 |
在这里,我有每一个1小时的任务间隔行。在每一行中,都有一个条件,即条件值。
所以现在我需要从1200开始,加上1,值到1900,总共是15。
输出如下所示。
|task|startTime|EndTime|workTime|conditionValue|value|
|----|---------|-------|--------|--------------|-----|
|T1 |1200 |1900 |1000 |15 |0 |
|T1 |1200 |1900 |1100 |15 |0 |
|T1 |1200 |1900 |1200 |15 |2 |
|T1 |1200 |1900 |1300 |15 |2 |
|T1 |1200 |1900 |1400 |15 |2 |
|T1 |1200 |1900 |1500 |15 |2 |
|T1 |1200 |1900 |1600 |15 |2 |
|T1 |1200 |1900 |1700 |15 |2 |
|T1 |1200 |1900 |1800 |15 |1 |
|T1 |1200 |1900 |1900 |15 |1 |
|T1 |1200 |1900 |2000 |15 |0 |
我试图实现这一点,但无法把条件和计数器内窗口功能。我所做的一切都是这样,现在有点茫然。我也不能使用rangebetween,因为它需要长值而不是列类型。
val window = Window.partitionBy("task").orderBy("workTime")
df.withColumn("value",sum(lead(col("value"), 1).over(window)+1).over(window))
暂无答案!
目前还没有任何答案,快来回答吧!