如何在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
我是新来的火花。你们中的任何人可以帮忙吗?