我正在学习火花和斯卡拉。我精通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以及它在哪里定义?
答案 0 :(得分:3)
来自ScalaDoc:
sqlContext.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。看起来在那里定义了两种类型的隐式转换:
rdd.toDf()
。