提问者:小点点

SQLContext隐含


我正在学习火花和scala。我精通java,但不太懂scala。我正在学习一个关于火花的教程,遇到了下面一行代码,它还没有被解释:

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

sc是SparkContext实例)

我知道scala隐含背后的概念(至少我想我知道)。有人能给我解释一下上面import语句的确切含义吗?实例化时,什么隐含绑定到sqlContext实例以及如何绑定?这些隐含是在SQLContext类中定义的吗?

编辑以下似乎也适用于我(新代码):

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

在上面的这段代码中。sqlContext到底是什么,它在哪里定义的?


共1个答案

匿名用户

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

并且在Spark编程指南中也进行了解释:

// 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类中定义的吗?

是的,它们是在SqlContext类中的objectimplicits中定义的,该类扩展了SQLImpuits. scala。看起来那里定义了两种类型的隐式转换:

  1. RDD到DataFrameHolder的转换,它允许使用上面提到的rdd. toDf()
  2. 用于将T类型的JVM对象与内部SparkSQL表示进行转换的各种编码器实例。