2015-12-02 60 views
0

可以說我有一個集羣上運行下面的代碼:廣播變量在星火

private def modifyDatasetFormat(data : String, mappings : Array[HashMap[String, Int]]) : Array[Tuple2[Tuple3[Int,Int,Int],Int]] = { 

} 

var map = new HashMap[String,Int]() 
map+=("hello" -> 2) 

var mappings = new Array[HashMap[String, Int]])(1) 
mappings(0)=map 

val originalDataset = sc.textFile("/home/paourissi/Desktop/MyProject/nursery.1000.withID") 
     val dataset = originalDataset. 
      flatMap(data => modifyDatasetFormat(data, mappingsInMap)).persist(StorageLevel.MEMORY_AND_DISK) 

我需要使用廣播的值映射或不需要嗎? 基本上我們什麼時候使用廣播變量呢?爲了效率?

謝謝。

回答

2

首先,廣播變量設計爲在整個集羣中共享,同時必須能夠適應一臺機器的內存。其次,廣播變量是不可變的,因此它們不能在以後改變(以防看累加器)。

效率: 內部火花,集羣中的所有節點嘗試通過下載什麼,他們可以和上傳什麼,他們可以快速,高效地分配變量。這使得它們比一個節點更快地嘗試並完成所有操作並將數據推送到所有節點。

正如Apache Spark documentation參考,廣播變量是「靜態查找表」

很大的情況下,您可以通過SparkTutorials

喜歡這個有趣的帖子