假设我在群集上运行以下代码:
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)
我是否需要使用广播进行值映射或不需要? 基本上我们什么时候使用广播变量呢?为了效率?
谢谢。
答案 0 :(得分:3)
首先,广播变量被设计为在整个集群中共享,同时必须能够在一台机器上适合内存。
其次,广播变量是不可变的,因此以后不能更改它们(如果看一下累加器)。
<强>效率强>: 在Spark内部,集群中的所有节点都尝试通过下载可能的内容并上传可能的内容来尽可能快速有效地分发变量。这使得它们比一个节点必须尝试做所有事情并将数据推送到所有节点要快得多。
正如Apache Spark documentation中所提到的,广播变量是静态查找表的一个很好的例子&#34;
您可能会喜欢SparkTutorials
这篇有趣的帖子