Ben*_*min 1 intellij-idea apache-spark
我的intellij项目中有一些Spark单元测试.当我逐个启动它们(逐个文件)时一切正常.当我想测试所有包时,我得到:
导致运行中止的异常或错误:此JVM中只能运行一个SparkContext(请参阅SPARK-2243).要忽略此错误,请设置spark.driver.allowMultipleContexts = true.
我已经读过将spark.driver.allowMultipleContexts设置为true是危险的: - /
有没有办法告诉intellij逐个运行测试.
Spark本身带有使用具有共享Spark上下文的特征的单元测试,因此您不必使用多个.您可以复制它并在自己的测试中使用它.
然而,我仍然遇到一些问题,其中IntelliJ中的测试是并行访问上下文.可以让所有测试都以串行方式运行,但是我使用以下版本的trait来锁定,只有 Spark测试在serie中运行,其他测试仍然可以并行运行:
import org.apache.spark.{SparkContext, SparkConf}
import org.scalatest._
import scala.concurrent.Lock
object Spark {
val lock = new Lock()
}
trait Spark extends BeforeAndAfterAll { self: Suite =>
@transient private var _sc: SparkContext = _
def sc: SparkContext = _sc
var conf = new SparkConf(false)
override def beforeAll() {
Spark.lock.acquire()
_sc = new SparkContext("local[4]", "test", conf)
super.beforeAll()
}
override def afterAll() {
if (_sc != null) {
_sc.stop()
}
Spark.lock.release()
// To avoid Akka rebinding to the same port, since it doesn't unbind immediately on shutdown
System.clearProperty("spark.driver.port")
_sc = null
super.afterAll()
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在测试中使用此特征,如下所示:
class MySpec extends FlatSpec with Spark {
"I" should "be able to use Spark" in {
sc.parallelize(Seq(1, 2, 3, 4, 5))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |