gpt4 book ai didi

scala - 如何实现 ScalaTest FunSuite 以避免样板 Spark 代码和导入隐式

转载 作者:行者123 更新时间:2023-12-03 20:25:38 24 4
gpt4 key购买 nike

我尝试重构 ScalaTest FunSuite 测试以避免样板代码来初始化和销毁​​ Spark session 。

问题是我需要导入隐式函数,但是使用 before/after 方法只能使用变量(var 字段),并且要导入它需要一个值(val 字段)。

这个想法是在每次测试执行时都有一个新的干净的 Spark session 。

我尝试做这样的事情:

import org.apache.spark.SparkContext
import org.apache.spark.sql.{SQLContext, SparkSession}
import org.scalatest.{BeforeAndAfter, FunSuite}

object SimpleWithBeforeTest extends FunSuite with BeforeAndAfter {

var spark: SparkSession = _
var sc: SparkContext = _
implicit var sqlContext: SQLContext = _

before {
spark = SparkSession.builder
.master("local")
.appName("Spark session for testing")
.getOrCreate()
sc = spark.sparkContext
sqlContext = spark.sqlContext
}

after {
spark.sparkContext.stop()
}

test("Import implicits inside the test 1") {
import sqlContext.implicits._

// Here other stuff
}

test("Import implicits inside the test 2") {
import sqlContext.implicits._

// Here other stuff
}

但是在线 import sqlContext.implicits._我有一个错误

Cannot resolve symbol sqlContext



如何解决这个问题或如何实现测试类?

最佳答案

为 spark 上下文定义一个新的不可变变量,并在导入隐式之前将 var 分配给它。

class MyCassTest extends FlatSpec with BeforeAndAfter {

var spark: SparkSession = _

before {
val sparkConf: SparkConf = new SparkConf()
spark = SparkSession.
builder().
config(sparkConf).
master("local[*]").
getOrCreate()
}

after {
spark.stop()
}

"myFunction()" should "return 1.0 blab bla bla" in {
val sc = spark
import sc.implicits._

// assert ...
}
}

关于scala - 如何实现 ScalaTest FunSuite 以避免样板 Spark 代码和导入隐式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41594759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com