【问题标题】:how to get the spark broadcast variable in the executor? spark-core如何在执行器中获取火花广播变量?火花芯
【发布时间】:2016-05-19 09:04:55
【问题描述】:

在这里,我有一个有两个工作的应用程序。在第一份工作中,我想设置广播,例如设置广播变量“true”,访问执行程序中的广播。在第二份工作中,我想将广播变量设置为“false”。以及如何达到要求? 我的代码是:

val conf = new SparkConf()
val sc = new SparkContext(conf)     
var setCapture = true
sc.broadcast(setCapture)
val file = lc.textFile("file" ,2)
val flatMap = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
val report = counts.collect()
setCapture = false
sc.broadcast(setCapture)
val packageResult = sc.parallelize(report).filter(_._1 == "package")
packageResult.collect.foreach(println)

我想在

中访问广播变量“setCapture

org.apache.spark.scheduler.ResultTask,

org.apache.spark.rdd.HadoopRDD,

org.apache.spark.util.collection.ExternalAppendOnlyMap

org.apache.spark.shuffle.hash.HashShuffleWriter.

我该怎么办?

【问题讨论】:

标签: apache-spark task broadcast executor


【解决方案1】:

来自 Spark 文档

广播变量是通过调用 SparkContext.broadcast(v) 从变量 v 创建的。广播变量是 v 的一个包装器,它的值可以通过调用 value 方法来访问。下面的代码显示了这一点:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3)) 
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

在创建广播变量后,应该在集群上运行的任何函数中使用它而不是值 v,这样 v 不会多次传送到节点。此外,对象 v 在广播后不应修改,以确保所有节点都获得相同的广播变量值(例如,如果变量稍后被运送到新节点)。

【讨论】:

  • 我想那么问题是如何在一个无法访问广播对象或火花上下文的函数中从广播变量中读取值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2017-02-13
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多