Всем привет!
Постараюсь внятно описать проблему. Упрощённый код в аттаче, выполняться не будет, многое порезал
Делаю свой spark партишенер. Это не case class, а обычный class, поэтому добавлены методы сериализации (скопированы из образцового класса, RangePartitioner). После добавления одного поля выявилась проблема. Выяснилось, что init класса может выполняться несколько раз, но и в образце - классе из исходников Spark та же ситуация. Это, конечно, плохо, но пока совета по этому кейсу не прошу
Вторая беда в том, что в методе объекта-компаньона возвращается Map с преобразованными значениями. Использую mapValues, но итератор проходит по каждому значению несколько раз, и излишне инкрементит мутабельную переменную, которую я использую для создания глобального индекса. Сами значения в итоге правильные, и их ровно столько, сколько нужно. Это точно происходит при обращении к полю rangeBounds в любом методе или при расчёте других полей. Помогите понять, почему итератор проходит несколько раз! Или что такое может происходить в Map.mapValues, что их нужно обходить несколько раз? Сериализация может быть с этим связана?
https://scastie.scala-lang.org/c7ljRtXiTOaFl5lObybiHQ