2015-12-02 146 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

喜欢这个有趣的帖子