Лучше обходным путем является создание столбца, содержащего метку времени. Всякий раз, когда вы хотите заблокировать строку, вы обновляете ее до текущего времени. Чтобы разблокировать обновление до времени не менее x минут в прошлом. Затем, чтобы проверить, не заблокирована ли эта отметка, что отметка времени не менее ста лет.
Таким образом, если процесс завершается с ошибкой (или пользователь никогда не завершает свою работу), блокировка эффективно заканчивается через x минут.
Способ взорвать ваш второй столбик и сохранить первый столбец эффективно flatMap
:
ds.flatMap{ case A(a,b) => b.map((a,_)) }
должен выдать:
+---+---+
| _1| _2|
+---+---+
| 1| A|
| 1| B|
| 2| C|
+---+---+