Joo*_*ung 7 scala apache-spark spark-submit
我试图从DataFrame到DataFrame编写一个转换方法.而且我也想通过scalatest进行测试.
如您所知,在使用Scala API的Spark 2.x中,您可以按如下方式创建SparkSession对象:
import org.apache.spark.sql.SparkSession
val spark = SparkSession.bulider
.config("spark.master", "local[2]")
.getOrCreate()
Run Code Online (Sandbox Code Playgroud)
此代码适用于单元测试.但是,当我使用spark-submit运行此代码时,群集选项不起作用.例如,
spark-submit --master yarn --deploy-mode client --num-executors 10 ...
Run Code Online (Sandbox Code Playgroud)
不会创建任何执行者.
我发现当我删除config("master", "local[2]")上面的部分代码时会应用spark-submit参数.但是,没有主设置,单元测试代码不起作用.
我试图将spark(SparkSession)对象生成部分拆分为test和main.但是,有很多代码块需要火花,例如import spark.implicit,_和spark.createDataFrame(rdd, schema).
有没有最好的做法来编写代码来创建spark对象来测试和运行spark-submit?
一种方法是创建一个提供 SparkContext/SparkSession 的特征,并在您的测试用例中使用它,如下所示:
trait SparkTestContext {
private val master = "local[*]"
private val appName = "testing"
System.setProperty("hadoop.home.dir", "c:\\winutils\\")
private val conf: SparkConf = new SparkConf()
.setMaster(master)
.setAppName(appName)
.set("spark.driver.allowMultipleContexts", "false")
.set("spark.ui.enabled", "false")
val ss: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
val sc: SparkContext = ss.sparkContext
val sqlContext: SQLContext = ss.sqlContext
}
Run Code Online (Sandbox Code Playgroud)
然后你的测试类标题看起来像这样,例如:
class TestWithSparkTest extends BaseSpec with SparkTestContext with Matchers{
| 归档时间: |
|
| 查看次数: |
8961 次 |
| 最近记录: |