在我开发的一种迭代算法中,我反复调用一个函数,正在发生意外的任务执行行为。
该函数本身在RDD上包含多个转换,并执行了一个“ isEmpty”操作以停止重新执行。
问题在于,无需调用操作即可评估转换。
如代码中所述,我仅每5次迭代就将动作称为“ 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”之前,正在执行操作
为什么我有线程池执行程序作业?那些“ tread pool executor”作业对应于迭代2、3、4,其中我没有执行“ isempty”。我应该只有对应于迭代5的“ isempty”工作。
我做错什么了吗?