Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala SQLContext隐式_Scala_Apache Spark - Fatal编程技术网

Scala SQLContext隐式

Scala SQLContext隐式,scala,apache-spark,Scala,Apache Spark,我正在学习spark和scala。我精通java,但对scala不太熟悉。我正在阅读有关spark的教程,遇到了以下代码行,但尚未解释: val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext.implicits._ (sc是SparkContext实例) 我知道scala隐含的概念(至少我想我知道)。有人能给我解释一下上面的import语句的确切含义吗?当实例被实例化时,什么隐式绑定到sqlCont

我正在学习spark和scala。我精通java,但对scala不太熟悉。我正在阅读有关spark的教程,遇到了以下代码行,但尚未解释:

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

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

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

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

来自:
sqlContext.implicits
包含Scala中用于将常见Scala对象转换为数据帧的“(特定于Scala的)隐式方法

并在以下章节中进行了说明:

例如,在下面的代码中,
.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
类中定义的,该类扩展了。看起来这里定义了两种类型的隐式转换:

  • RDD到DataFrameHolder的转换,允许使用上述
    RDD.toDf()
  • 其中的各种实例“用于将T类型的JVM对象与内部Spark SQL表示进行转换。”

  • 是的,但是
    sqlContext
    是预定义的吗??我刚刚创建了一个上面类
    sqlContext
    的对象
    sqlContext
    。预定义的sqlContext是什么意思?Spark API中已经定义了
    sqlContext
    的一个版本,它与上面定义的
    sqlContext
    不同吗?当然,还有HiveContext,它扩展了SqlContext。如果你说的是实际的实例,那么不,没有其他实例,你必须创建自己的实例。我知道了。SQL上下文在spark shell中作为sqlContext提供。就像SparkContext实例可以作为sc使用一样
    // this is used to implicitly convert an RDD to a DataFrame.
    import 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()