1
設想一個簡單的程序是這樣的:Apache Spark:當一個工作人員使用尚未廣播的主機對象值時會發生什麼?
def main(args: String[]):
val hostLocalValue = args(0).toInt
val someRdd = getSomeIntRdd
val mySum = someRdd
.map(x => if (x < 0) 1 else hostLocalValue)
.reduce(_ + _)
print(mySum)
其在遠程工人執行的地圖函數使用主機 - 本地值而沒有正被廣播。這個怎麼用?如果THAT一直工作,那麼我們需要什麼broadcast()?
這不會是100gig流量嗎?我認爲答案是「是的,但'發送'操作只能完成一次。」我對嗎? – 2014-10-20 20:45:53
如果您有100mb字典,10個工作節點,您想要映射的數據集有1000個分區(每個工作者100個),如果您從驅動程序節點發送此數據,則必須發送100mb * 10 = 1gig的數據。然而,對於廣播變量,Spark使用高性能的p2p協議,因此速度會更快。使用java序列化,你將不得不發送100mb數據1000次的序列化clojure – 2014-10-20 21:03:05