Обратите внимание, что ваше самое первое totalRewards=147
является суммой предыдущего значения 49
+ все значения с отметкой времени "2019-08-07 18:25:06": 49 + (36 + 0 + 60 + 2
) = 147
.
Первый вариант - агрегировать все значения с одним и тем же кулаком отметки времени, например, groupBy($"userId", $"lastModified").agg(sum($"noOfJumps").as("noOfJumps"))
(или что-то в этом роде), а затем запустить сумму суммирования.Это полностью удалит дубликаты временных отметок.
Второй вариант заключается в использовании row_number для определения порядка между строками с одним и тем же полем lastModified
, а затем для запуска вашей совокупной суммы с .orderBy($"lastModified, $"row_number")
(или что-то типа того).Это должно вести все записи и давать вам частичную сумму по пути: totalRewards = 49 -> 85 -> 85 -> 145 -> 147
(или что-то подобное в зависимости от порядка, определенного в row_number)