【问题标题】:Using a broadcast variable in a loop in Spark with updated values在 Spark 的循环中使用具有更新值的广播变量
【发布时间】:2018-03-26 15:01:22
【问题描述】:

我在循环中使用广播变量,如下所示(为了简短起见,我用一种伪代码来展示它,而不是 Java 中的确切语法):

Broadcast<List<E>> brdList = jsc.broadcast(myVariable);
JavaRDD<myType> rdd = rawRdd.map(f(brdList.value()));  
List<E> updatedBrdList = rdd.map(g).collect();
brdList.unpersist();

int itr = 1000;
while (itr != 0){
   Broadcast<List<E>> brdNewList(updatedBrdList);
   rdd = rdd.map(f(brdNewList.value()));
   updatedBrdList = rdd.map(g).collect();
   itr--;
}

这种用法是使用广播变量的有效形式吗? brdNewList 是在内存中占用一个位置还是在每次迭代中都占用了新空间并创建了一个新副本?

迭代次数很少(~ the error with using broadcast variable in Spark

有什么办法可以绕过它并让它工作吗?广播变量的值必须在每次迭代中通过所有节点访问。

这与驱动程序内存有关吗?或者执行者(工人)中有一些计算? (我在一个有 5 个节点的集群上运行我的代码。)

感谢任何帮助!

【问题讨论】:

    标签: apache-spark broadcast


    【解决方案1】:

    “要在 Spark 转换中使用广播值,您必须首先使用 SparkContext.broadcast 创建它,然后使用 value 方法访问共享值。在 Introductory Example section 中学习它。

    【讨论】:

    • 示例网址已过时。
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多