spark闭包在局部模式下的行为

zzwlnbp8  于 2021-07-12  发布在  Spark
关注(0)|答案(0)|浏览(241)

我在我的机器v/sa3节点集群(spark2.4.5)上观察到spark和闭包在本地模式下的奇怪行为。
下面是一段代码

object Example {
  val num=5
  def myfunc={

  sc.parallelize(1 to 4).map(_+num).foreach(println)
}
}

我预计这会失败,因为闭包中需要局部变量num,因此示例对象需要序列化,但它不能序列化,因为它不扩展可序列化接口。
当我在同一台本地机器上运行spark shell中的同一段代码时,它会失败,错误原因如下:

当我在一个3节点的emr集群上以yarn模式运行同一段代码时,它失败了,错误与上面的屏幕截图完全相同……给出了上面提到的相同原理。
当我在同一集群(=>主节点)上以本地模式运行同一段代码时,它也会失败。同样的道理仍然成立。
但是,当我从一个sbt项目运行时(不是spark安装或任何东西…只是在我的sbt项目中添加了spark库,并在本地模式下使用conf.master(local[…]),运行良好,并给出了6,7,8,9的o/p:

这意味着除了通过在sbt项目中添加spark依赖项来运行它之外,它在任何地方都可以正常运行。问题是,通过在sbt项目中简单地添加spark库,如何解释运行spark代码时不同的本地模式行为?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题