提问人:Sheel Pancholi 提问时间:2/26/2021 最后编辑:Sheel Pancholi 更新时间:2/26/2021 访问量:51
IDE 中本地模式下的 Spark 闭包行为
Spark closures behavior in local mode in IDEs
问:
我在我的机器上观察到 3 节点集群 (Spark 2.4.5) 在本地模式下的 spark 和闭包的奇怪行为。
以下是一段代码
object Example {
val num=5
def myfunc={
sc.parallelize(1 to 4).map(_+num).foreach(println)
}
}
无论如何,我预计这会失败,因为闭包中需要局部变量 num,因此需要序列化 Example 对象,但它不能,因为它没有扩展 Serializable 接口。
- 当我在同一台本地机器上从 spark-shell 运行相同的代码时,它失败了,并出现错误,给出了上述基本原理:
- 当我在 3 节点 EMR 集群上以 yarn 模式运行相同的代码时,它失败了,并出现与上面屏幕截图完全相同的错误......给出与上述相同的理由。
- 当我在同一集群(=>主节点)上以本地模式运行同一段代码时,它也会失败。同样的理由仍然成立。
- 但是,当我从 sbt 项目运行时(不是 Spark 安装或其他任何东西......刚刚将 Spark 库添加到我的 sbt 项目并使用了 conf.master(local[..])在本地模式下运行良好,并给我 6,7,8,9 的 O/P:
这意味着它在任何地方都能正常运行,除非你通过在 sbt 项目中添加 Spark 依赖项来运行它。问题是,通过简单地在 sbt 项目中添加 Spark 库来解释运行 Spark 代码时不同的本地模式行为是什么?
答: 暂无答案
下一个:Scala:咖喱与闭合
评论