2017-05-24 85 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階段。 –