首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sbt测试时无法初始化Spark上下文

使用sbt测试时无法初始化Spark上下文
EN

Stack Overflow用户
提问于 2016-02-09 08:44:40
回答 2查看 1.5K关注 0票数 1

我已经使用Specs2框架中的Scala在Spark中编写了单元测试用例。在一些测试中,我创建了一个Spark上下文并传递函数。

代码语言:javascript
复制
         val conf = new SparkConf().setAppName("test").setMaster("local[2]")
         val sc = new SparkContext(conf)
         val rdd = sc.parallelize(arr)
         val output = Util.getHistograms(rdd, header, skipCols, nBins)

这些测试在eclipse JUnit插件中正确执行,没有任何错误或失败,但是当我运行sbt test时,会得到一个奇怪的异常,测试会返回错误。

代码语言:javascript
复制
[info] Case 8: getHistograms should
[error]   ! return with correct output
[error]    akka.actor.InvalidActorNameException: actor name [ExecutorEndpoint] is not unique! (ChildrenContainer.scala:192)
[error] akka.actor.dungeon.ChildrenContainer$TerminatingChildrenContainer.reserve(ChildrenContainer.scala:192)
[error] akka.actor.dungeon.Children$class.reserveChild(Children.scala:77)
[error] akka.actor.ActorCell.reserveChild(ActorCell.scala:369)
[error] akka.actor.dungeon.Children$class.makeChild(Children.scala:202)
[error] akka.actor.dungeon.Children$class.attachChild(Children.scala:42)
[error] akka.actor.ActorCell.attachChild(ActorCell.scala:369)
[error] akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:552)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv.actorRef$lzycompute$1(AkkaRpcEnv.scala:92)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv.org$apache$spark$rpc$akka$AkkaRpcEnv$$actorRef$1(AkkaRpcEnv.scala:92)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$setupEndpoint$1.apply(AkkaRpcEnv.scala:148)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$setupEndpoint$1.apply(AkkaRpcEnv.scala:148)
[error] org.apache.spark.rpc.akka.AkkaRpcEndpointRef.actorRef$lzycompute(AkkaRpcEnv.scala:281)
[error] org.apache.spark.rpc.akka.AkkaRpcEndpointRef.actorRef(AkkaRpcEnv.scala:281)
[error] org.apache.spark.rpc.akka.AkkaRpcEndpointRef.hashCode(AkkaRpcEnv.scala:329)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv.registerEndpoint(AkkaRpcEnv.scala:73)
[error] org.apache.spark.rpc.akka.AkkaRpcEnv.setupEndpoint(AkkaRpcEnv.scala:149)
[error] org.apache.spark.executor.Executor.<init>(Executor.scala:89)
[error] org.apache.spark.scheduler.local.LocalEndpoint.<init>(LocalBackend.scala:57)
[error] org.apache.spark.scheduler.local.LocalBackend.start(LocalBackend.scala:119)
[error] org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:144)
[error] org.apache.spark.SparkContext.<init>(SparkContext.scala:514)
[error] UtilTest$$anonfun$8$$anonfun$apply$29.apply(UtilTest.scala:113)
[error] UtilTest$$anonfun$8$$anonfun$apply$29.apply(UtilTest.scala:111)

我猜是因为SparkContext (sc)没有被创建,而且我得到了一个null,但是我不知道是什么导致了这一点。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 13:34:01

之所以会发生这种情况,是因为sbt一起执行所有测试,因此由于多次运行规范文件而创建了多个SparkContext。要解决这个问题,请添加一个单独的对象并在其中初始化SparkContext。在整个测试代码中使用这个sc,这样就不会多次创建它。

票数 1
EN

Stack Overflow用户

发布于 2016-02-09 15:28:04

事实上,原因甚至更简单--您不能同时在同一个JVM中运行可变的火花上下文。sbt测试并行执行测试,这意味着如果您的测试都产生了火花上下文,那么测试将失败。

要防止这种情况发生,请在build.sbt中添加以下内容:

代码语言:javascript
复制
// super important with multiple tests running spark Contexts
parallelExecution in Test := false

这将导致顺序测试的执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35287424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档