2017-05-24 84 views
2

我使用的火花Java API和我已经开始注意到,我无法解释这种奇怪的事情重复的阶段。正如你在火花:在使用加入

enter image description here

这是我的计划执行的DAG可视化看到,无其他阶段使用3级的计算,也是在第3阶段的三种操作正是第2阶段的前3个操作,所以我的问题,为什么第三阶段是分开计算的?我还没有最后连接操作,这样做具有以下DAG这里运行程序,

enter image description here

通知,有像前面的一个没有平行的阶段。我相信由于这个无法解释的阶段3,我的计划正在放缓。

PS:我很新的火花,这是我的第一个计算器问题,请让我知道这是题外话,或需要更多的细节。

+0

你能显示代码?我可以尝试重现自己,但会感谢您可能提供的任何帮助。谢谢! –

+0

我_guess_是,它是在网络用户界面的问题,以图表的RDD血统。你可以在'join'之后的RDD上加入'DebugString'并粘贴到你的问题上吗? –

回答

1

它看起来像连接操作需要2个输入:

  1. 地图的结果是在第2阶段
  2. 的flatMap的结果是第2阶段
  3. 的第六操作中的第三操作

星火着眼于一个单一的阶段,在计划何时它的计算时间。它不知道它将需要保留两组值。这可能导致第三步值被覆盖,而后面的步骤正在计算中。当它到达需要两组值的join时,它会意识到它需要这些缺失值并将重新计算它们,这就是为什么您会看到再现阶段2第一部分的附加阶段。

你可以告诉它来保存中间值后,通过从地图操作所产生的RDD调用.cache(),然后加入对RDD从cache()返回。这将导致spark尽最大努力将这些值保存在内存中。您可能仍会看到新的阶段出现,但如果有足够的可用内存来存储值,它应该立即完成。

+0

我认为这只是一个用户界面问题,并认为第3阶段应该真正连接到第4阶段。 –