【问题标题】:Spark: passing broadcast variable to executorsSpark:将广播变量传递给执行程序
【发布时间】:2015-06-24 17:39:53
【问题描述】:

我正在使用以下代码将广播变量传递给我的所有执行程序。该代码似乎有效,但我不知道我的方法是否足够好。只是想看看有没有人有更好的建议。非常感谢!

val myRddMap = sc.textFile("input.txt").map(t => myParser.parse(t))
val myHashMapBroadcastVar = sparkContext.broadcast(myRddMap.collect().toMap)

其中myRddMap 的类型为org.apache.spark.rdd.RDD[(String, (String, String))]

然后我有一个实用函数,我传递 RDD 和变量,例如:

val myOutput = myUtiltityFunction.process(myRDD1, myHashMapBroadcastVar)

那么上面的代码是处理广播变量的好方法吗?或者有没有更好的方法?谢谢!

【问题讨论】:

  • 我觉得没问题。一句话:如果数据适合一台机器(如果你可以collect它就可以),那么就没有必要将它加载到RDD中。你可以在没有 Spark 的情况下加载和解析它并避免一些开销。

标签: scala apache-spark broadcast


【解决方案1】:

广播变量允许程序员在每台机器上缓存一个只读变量,而不是随任务一起发送它的副本。

广播变量实际上被发送到所有节点。因此,您在实用程序功能或任何地方使用它们都没有关系。至于我认为你在做正确的事,似乎没有什么错误导致表现不佳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2016-08-18
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多