Ank*_*try 5 scala apache-spark
我正在学习Spark和Scala。我精通Java,但对Scala却不太了解。我正在阅读有关Spark的教程,并遇到了以下代码行,但尚未解释:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)
(sc是SparkContext实例)
我知道scala隐式背后的概念(至少我想我知道)。有人可以向我解释import以上声明的确切含义吗?什么implicits是绑定到sqlContext实例时,它被实例化,怎么样?这些隐式是否在SQLContext类内定义?
编辑 以下内容似乎也对我有用(新鲜代码):
val sqlc = new SQLContext(sc)
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)
在上面的代码中。sqlContext到底是什么?在哪里定义?
来自ScalaDoc:
sqlContext.implicits包含“Scala 中可用的(Scala 特定的)隐式方法,用于将常见的 Scala 对象转换为 DataFrame。”
并且在Spark 编程指南中也有解释:
// this is used to implicitly convert an RDD to a DataFrame.
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)
例如,.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()
Run Code Online (Sandbox Code Playgroud)
sqlContext 实例在实例化时绑定了哪些隐式?这些隐式是在 SQLContext 类中定义的吗?
是的,它们是implicits在SqlContext类内部的对象中定义的,它扩展了SQLImplicits.scala。看起来那里定义了两种类型的隐式转换:
rdd.toDf().