首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scala中导入spark.implicits._

在scala中导入spark.implicits._
EN

Stack Overflow用户
提问于 2016-08-26 01:17:12
回答 8查看 57.6K关注 0票数 55

显然,我正在尝试导入spark.implicits._,这是scala中的一个类中的对象。当我将其导入如下所示的方法时:

代码语言:javascript
复制
def f() = {
  val spark = SparkSession()....
  import spark.implicits._
}

它工作得很好,但是我正在编写一个测试类,我想让这个导入对我尝试过的所有测试都可用:

代码语言:javascript
复制
class SomeSpec extends FlatSpec with BeforeAndAfter {
  var spark:SparkSession = _

  //This won't compile
  import spark.implicits._

  before {
    spark = SparkSession()....
    //This won't either
    import spark.implicits._
  }

  "a test" should "run" in {
    //Even this won't compile (although it already looks bad here)
    import spark.implicits._

    //This was the only way i could make it work
    val spark = this.spark
    import spark.implicits._
  }
}

这不仅看起来很糟糕,而且我不想每次测试都这样做。什么是“正确”的方法?

EN

回答 8

Stack Overflow用户

发布于 2016-08-27 03:29:30

您可以执行与Spark测试套件中类似的操作。例如,这是可行的(受SQLTestData启发):

代码语言:javascript
复制
class SomeSpec extends FlatSpec with BeforeAndAfter { self =>

  var spark: SparkSession = _

  private object testImplicits extends SQLImplicits {
    protected override def _sqlContext: SQLContext = self.spark.sqlContext
  }
  import testImplicits._

  before {
    spark = SparkSession.builder().master("local").getOrCreate()
  }

  "a test" should "run" in {
    // implicits are working
    val df = spark.sparkContext.parallelize(List(1,2,3)).toDF()
  }
}

或者,您也可以直接使用诸如SharedSQLContext之类的内容,它提供了一个testImplicits: SQLImplicits,即:

代码语言:javascript
复制
class SomeSpec extends FlatSpec with SharedSQLContext {
  import testImplicits._

  // ...

}
票数 28
EN

Stack Overflow用户

发布于 2016-11-06 11:36:28

我认为SparkSession.scala文件中的GitHub代码可以给你一个很好的提示:

代码语言:javascript
复制
      /**
       * :: Experimental ::
       * (Scala-specific) Implicit methods available in Scala for converting
       * common Scala objects into [[DataFrame]]s.
       *
       * {{{
       *   val sparkSession = SparkSession.builder.getOrCreate()
       *   import sparkSession.implicits._
       * }}}
       *
       * @since 2.0.0
       */
      @Experimental
      object implicits extends SQLImplicits with Serializable {
        protected override def _sqlContext: SQLContext = SparkSession.this.sqlContext
      }

这里"spark.implicits._“中的"spark”就是我们创建的sparkSession对象。

Here是另一个参考!

票数 12
EN

Stack Overflow用户

发布于 2017-07-28 03:27:04

我只实例化了SparkSession和之前使用的"import implicits“。

代码语言:javascript
复制
@transient lazy val spark = SparkSession
  .builder()
  .master("spark://master:7777")
  .getOrCreate()

import spark.implicits._
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39151189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档