如何使一个巨大的数组对 Spark 中的所有工作节点可见

how to make a huge array visible to all worker nodes in Spark

我正在使用 Spark Java API 来实现 MMD, chapter 6 中描述的 A-Priori 算法,该算法将需要涉及一个巨大的 int 数组,如下所示:

frequent_item[i] = x, // i is a big integer, x is some integer

现在,如何使这个数组对集群中的所有工作节点可见?更具体地说,

  1. 可以sc.broadcast(frequent_item)用于此目的吗?
  2. 这是否意味着这个巨大的数组将在每个工作节点的内存中都有一个副本?
  3. 对于此类事情,最佳实践指南是什么?

谢谢,一如既往!

广播是正确的方法。

  1. val y = sc.broadcast(frequent_item)会播出frequent_item 并且 y 将变为 Broadcast[Array[Int]] 并且值可以是 使用以下方式访问:y.value

    要访问第 (i) 个元素,代码是 val element = y.value(i) // 标量表示法

  2. 这是否意味着这个巨大的数组将在 每个工作节点?是的,每个节点中都会有数据的副本。

  3. 最佳实践 a.) 估计广播变量的大小,并考虑到这一点来确定执行程序和驱动程序的内存。 b.) 仅在需要时广播 c.) 一旦不使用广播变量就取消持久化。

有关详细信息,请阅读 Spark Brodcast