Это действительно не так, как работает Spark.
Код, введенный в foreachPartition
, выполняется в ином контексте, чем исходный
List<HashMap> finalJsonMap = new ArrayList<HashMap>();
Все, что вы можете сделать в такой настройке, - это изменить локальное копирование.
Это многократно обсуждалось при переполнении стека и подробно описано в официальной документации в разделе «Общие сведения о замыканиях» .
С учетом требуемого результата (т. Е. Локальной коллекции) на самом деле вы ничего не можете сделать, кроме как преобразовать свой код в mapPartitions
и collect
.Однако это вряд ли эффективно или идиоматично в Spark.
Я бы настоятельно рекомендовал переосмыслить ваш текущий дизайн.