迭代编程-在不启动作业的情况下执行作业

时间:2019-05-04 14:52:47

标签: apache-spark

在我开发的一种迭代算法中,我反复调用一个函数,正在发生意外的任务执行行为。

该函数本身在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”之前,正在执行操作

timeline

为什么我有线程池执行程序作业?那些“ tread pool executor”作业对应于迭代2、3、4,其中我没有执行“ isempty”。我应该只有对应于迭代5的“ isempty”工作。

我做错什么了吗?

0 个答案:

没有答案