В разработанном итеративном алгоритме, в котором я рекурсивно вызываю функцию, происходит непредвиденное поведение выполнения задач.
Сама функция содержит несколько преобразований в СДР и действие "isEmpty" дляостановите рекурсивное выполнение.
Проблема состоит в том, что преобразования оцениваются без вызова действия.
, как описано в коде, который я называю действием "IsEmpty" только каждые пять итераций.Функция процесса содержит только такие преобразования, как: фильтр, объединение, широковещание, выбор DF, кэш, объединение.
var layer_index=0
def iterate(layer:RDD[Long])={
layer.cache()
if(layer_index%5==0) if(layer.isEmpty) return null
val nextlayer=process(layer)
layer_index=layer_index+1
iterate(nextlayer)
}
Но, как вы можете видеть на рисунке ниже, действия выполняются до того, как временная шкала достигнет "isEmpty "
график
Почему у меня есть задания для выполнения пула потоков?эти задания "Исполнитель пула протектора" соответствуют итерациям 2,3,4, где я не выполняю "isempty".у меня должна быть только работа "isempty", соответствующая итерации 5.
Я что-то не так делаю?