scala repl在spark rdd上调用map(f).sum时无限期挂起

xfyts7mz  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(430)

我发现下面的简单示例无限期地挂在scala repl中( sbt console ):

import org.apache.spark.sql._
val spark = SparkSession.builder().master("local[*]").getOrCreate()
val sc = spark.sparkContext
val rdd = sc.parallelize(1 to 100000000)
val n = rdd.map(_ + 1).sum

但是,下面的工作很好:

import org.apache.spark.sql._
val spark = SparkSession.builder().master("local[*]").getOrCreate()
val sc = spark.sparkContext
val rdd1 = sc.parallelize(1 to 100000000)
val rdd2 = rdd1.map(_ + 1)
val n = rdd2.sum

我很困惑,希望有人能解释一下。。。假设他们能重现“问题”。
这基本上只是杏仁内核的spark文档页面上提供的示例,在使用杏仁内核的jupyter中确实可以很好地工作。也, sbt "runMain Main" 适用于以下情况:

import org.apache.spark.sql._

object Main extends App {
  val spark = SparkSession.builder().master("local[*]").getOrCreate()
  val sc = spark.sparkContext
  val rdd = sc.parallelize(1 to 100000000)
  val n = rdd.map(_ + 1).sum

  println(s"\n\nn: $n\n\n")

  spark.stop
}

为了完整性,我使用了一个非常简单的 build.sbt 文件,如下所示:

name := """sparktest"""

scalaVersion := "2.12.10"

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.6"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.6"
vmdwslir

vmdwslir1#

当我关闭控制台时,我注意到如下一系列错误:

08:53:36 ERROR Executor:70 - Exception in task 2.0 in stage 0.0 (TID 2): Could not initialize class $line3.$read$$iw$$iw$$iw$$iw$

这让我想到:
repl中的lambda(使用对象 Package 器)+并发=死锁#9076
似乎我的问题是同一件事,是针对Scala2.12的。将以下行添加到 build.sbt 似乎是公认的解决方法:

scalacOptions += "-Ydelambdafy:inline"

相关问题