如何在另一个阶段开始之前强制火花完成一个阶段?

时间:2015-01-26 07:45:23

标签: apache-spark

Env:Spark 1.2.0在yarn-client模式下运行。问题不会出现在本地模式中。

任务:使用RDD1创建Map,然后在RDD2.map()上使用此Map。

异常:在Map上导致没有这样的键(必须存在,数据绝对正确)。我认为这是因为使用了一个不在最后阶段的Map。

解决方案1失败:

使用val bcMap = RDD2.context.broadcast(Map)代替。顺便说一句,以前就有用了。

解决方案2失败: val Map = CreateMap(RDD1.collect)此前也有效。

解决方案失败3: 两者结合起来。之前的工作

成功:

做一些奇怪的事情,实际上没有什么好处但浪费CPU时间,如Map.keys.foreach(println)

其他:

3个失败的解决方案并没有完全失败,它们确实在某个阶段工作,但后来我在MakingMap()和UseMap()之间写了一些代码,它们都开始失败了。

我想这是由Spark DAG调度程序引起的,它认为那些任务没有任何关系然后同时运行它们(我很惊讶广播这次不能帮助我)。我只是想知道是否有办法告诉DAG调度程序如何处理它们或只是强迫某些工作停止懒惰?

0 个答案:

没有答案