spark窗口

6ie5vjzr  于 2021-07-13  发布在  Spark
关注(0)|答案(0)|浏览(221)

大家好,我想对以下数据集使用窗口操作。

|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))

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题