SQLContext暗示

时间:2016-03-09 07:41:22

标签: scala apache-spark

我正在学习火花和斯卡拉。我精通java,但不是scala。我正在阅读关于spark的教程,并遇到了以下代码行,这些代码尚未解释:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._

sc是SparkContext实例)

我知道scala暗示背后的概念(至少我想我知道)。有人可以向我解释上面的import陈述究竟是什么意思吗? implicits实例在sqlContext实例化时绑定的内容是什么?这些隐含是在SQLContext类中定义的吗?

修改 以下似乎也适用于我(新代码):

val sqlc = new SQLContext(sc)
import sqlContext.implicits._

在上面的代码中。什么是sqlContext以及它在哪里定义?

1 个答案:

答案 0 :(得分:3)

来自ScalaDocsqlContext.implicits包含Scala中可用的“(Scala特定的)隐式方法,用于将常见的Scala对象转换为DataFrame。”

并在Spark programming guide中解释:

// this is used to implicitly convert an RDD to a DataFrame.
import sqlContext.implicits._

例如,除非您导入.toDF(),否则sqlContext.implicits下面的代码将无效:

val airports = sc.makeRDD(Source.fromFile(airportsPath).getLines().drop(1).toSeq, 1)
    .map(s => s.replaceAll("\"", "").split(","))
    .map(a => Airport(a(0), a(1), a(2), a(3), a(4), a(5), a(6)))
    .toDF()
  

sqlContext实例绑定的含义是什么   实例化和如何?这些隐含是在SQLContext类中定义的吗?

是的,它们是在implicits类内的对象SqlContext中定义的,它扩展了SQLImplicits.scala。看起来在那里定义了两种类型的隐式转换:

  1. RDD到DataFrameHolder转换,可以使用上面提到的rdd.toDf()
  2. Encoder的各种实例,“用于将类型T的JVM对象转换为内部Spark SQL表示形式。”