当前位置: 首页 > 知识库问答 >
问题:

在Scala中创建SparkSession对象以在unittest和spark-submit中同时使用的最佳实践

白星海
2023-03-14
import org.apache.spark.sql.SparkSession

val spark = SparkSession.bulider
     .config("spark.master", "local[2]")
     .getOrCreate()
spark-submit --master yarn --deploy-mode client --num-executors 10 ...

不创建任何执行程序。

我发现在删除上面代码的config(“master”,“local[2]”)部分时应用了spark-submit参数。但是,如果没有master设置,单元测试代码就无法工作。

我尝试将spark(SparkSession)对象生成部分拆分为test和main。但是有很多代码块需要spark,例如importspark.implicit、_spark.createDataFrame(rdd,schema)

是否有任何最佳实践来编写代码来创建spark对象来测试和运行Spark-Submit?

共有1个答案

李昱
2023-03-14

一种方法是创建一个提供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
}

然后您的测试类头看起来如下所示:

类TestWithSparkTest扩展带有匹配器的SparkTestContext的BaseSpec{

 类似资料:
  • 问题内容: 要创建一个空的JSON对象,我通常使用: 将null强制转换为对象有效,但是此解决方案是否还有其他更好的方法和/或任何问题? 问题答案: 您的解决方案可以工作。 该文档指定将导致一个空的对象,因此可能有人说您的代码有效,这是使用的方法。 PHP:对象-手册 如果将任何其他类型的值转换为对象,则将创建stdClass内置类的新实例。如果值为NULL,则新实例将为空。 ..但是,请尝试确保

  • 我的查询如下: > 在我的应用程序中,我需要在计划中同时运行多个pyspark应用程序。是否有任何方法可以同时从spark驱动程序运行多个pyspark应用程序,从而创建单独的sparkcontext对象? 如果第一个查询的答案是否定的,那么我可以运行一个应用程序从驱动程序,另一个从执行程序,但我可以一次运行它。 null 配置:VM-1:Hadoop主节点、Spark驱动程序和执行程序、Mong

  • 问题内容: 我正在尝试kafka.utils.ZKStringSerializer用clojure创建一个scala对象。(在org.apache.kafka/kafka_2.10 “0.8.0”) 由于我对scala知之甚少,所以我不知道如何调用它的构造函数。我这样尝试过: 并得到一个错误: 我尝试使用来查看其方法,但是只有一些静态方法。并告诉我这是一类,而不是我想要的实例。 该对象的实现如下:

  • 在我的Play web应用程序中,我使用的是从未来获取结果。有没有其他更好的方法(使用最佳实践)从数据库中获得结果?如果我使用或我的控制器完成执行,结果还不在中。下面是我的控制器方法。一切正常,但我需要在Scala中遵循更多的最佳实践。 编辑:我已经在使用。但在这个例子中,我不能使用,基本上是因为。我想在验证json之前,我需要一个来包围该方法的所有代码。 使用平面地图和map的新方法。我的问题是

  • 问题内容: 可以将 Spark RDD 通过管道传输到Python吗? 因为我需要一个python库来对数据进行一些计算,但是我的主要Spark项目基于Scala。有没有办法将两者混合使用或让python访问相同的spark上下文? 问题答案: 实际上,您可以使用Scala和Spark以及常规Python脚本来传递到python脚本。 test.py 火花壳(scala) 输出量 你好约翰 你好林

  • 我目前正在改进一些旧的uni分配,将它们从可序列化文件转移到任何其他形式的存储,主要是SQL数据库。我理解关系数据库设计的概念以及与OOP类的相似之处,但是,我不完全确定如何从OOP设计的角度来处理这个问题。 现在我有一个酒店类,房间列表为属性,每个房间都有一个客人列表为属性(此处为完整代码) 回到使用文件时,我可以用Serializable接口标记这些类,并将父对象存储在单个文件中。但是当使用关