Spark Scala - 数据处理 - 计算以前的值

时间:2018-03-09 06:13:32

标签: scala spark-dataframe

如何在spark中实现像这样的数据转换。

Input:

startTime, Entity, Index

- T1, E1, I1
- T1, E1, I2
- T1, E1, I3
- T2, E1, I2
- T2, E1, I3
- T2, E1, I4
- T3, E1, I3
- T3, E1, I4
- T3, E1, I5
- T4, E2, I6

output:

startTime,Entity,Index,endTime

- T4, E2, I6, null
- T3, E1, I5, null
- T3, E1, I4, null
- T3, E1, I3, null
- T2, E1, I4, null
- T2, E1, I3, null
- T2, E1, I2, T3
- T1, E1, I3, null
- T1, E1, I2, T3
- T1, E1, I1, T2

Logic:

请看实体E2 - 它只有一个没有任何重叠的值I6。 - >因此,对于实体E2,I6是活动的,因此没有endTime。

==== T3 ====

现在,回到实体E1 - >索引I3,I4和I5处于活动状态,因为它们对应于该特定实体的最大(时间戳)(E1)

因此,所有这些都将endTime视为null。

- T3, E1, I5, null
- T3, E1, I4, null
- T3, E1, I3, null

==== T2 ====

因为,I3和I4已经出现在T3中并且计算了endTime,我们需要保持相同的结束时间为空。

- T2, E1, I4, null
- T2, E1, I3, null

T3中没有索引I2,因此索引I2未处于活动状态且在T3处过期

- T2, E1, I2, T3

==== T1 ====

索引I2和I3已存在于T2中,因此使用相同的endTime。

- T1, E1, I3, null
- T1, E1, I2, T3

T2中不存在索引I1,因此索引I1未激活且在T2处过期

- T1, E1, I1, T2

我是新来的火花。你们中的任何人可以帮忙吗?

0 个答案:

没有答案