如何使SparkSession和Spark SQL全局可用(在函数和对象中)?

时间:2017-07-21 08:21:02

标签: scala apache-spark apache-spark-sql

我有一个包含很多.scala文件的项目。我想按如下方式使用Spark SQL:

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

val spark: SparkSession = SparkSession.builder()
                                      .appName("My app")
                                      .config("spark.master", "local")
                                      .getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._

将上述代码包装在单个对象中是一种好习惯,如:

object sparkSessX{
   import org.apache.spark.sql.SparkSession
   import org.apache.spark.sql.functions._

   val spark: SparkSession = SparkSession.builder()
                                      .appName("My App")
                                      .config("spark.master", "local")
                                      .getOrCreate()

   // For implicit conversions like converting RDDs to DataFrames
   import spark.implicits._
}

并且每个类都要扩展或导入该对象?

1 个答案:

答案 0 :(得分:1)

我以前从未见过它,但是Scala开发人员使用Spark越多,我们就会看到越来越多的新设计模式出现。那可能是一个。

我认为您可以考虑隐含val spark并通过此隐式上下文(作为函数的第二个参数集)将其传递到所需位置。

然而,我会考虑让对象成为特征(因为我不确定你是否可以扩展Scala对象),而且还要为你的类的其他特征留出空间。