scala - SQLContext 隐式

标签 scala apache-spark

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

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

( sc 是 SparkContext 实例)

我知道 scala 隐式背后的概念(至少我想我知道)。有人可以向我解释 import 的确切含义吗?上面的说法?什么implicits绑定(bind)到 sqlContext实例何时实例化以及如何实例化?这些隐式是否在 SQLContext 类中定义?

编辑
以下似乎也适用于我(新代码):
val sqlc = new SQLContext(sc)
import sqlContext.implicits._

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

最佳答案

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

并且在 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()

What implicits are bound to the sqlContext instance when it is instantiated and how? Are these implicits defined inside the SQLContext class?



是的,它们在对象 implicits 中定义里面 SqlContext类,扩展 SQLImplicits.scala .看起来那里定义了两种类型的隐式转换:
  • RDD 到 DataFrameHolder 的转换,可以使用上面提到的 rdd.toDf() .
  • Encoder 的各种实例它们是“用于将 T 类型的 JVM 对象与内部 Spark SQL 表示形式相互转换。”
  • 关于scala - SQLContext 隐式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35885702/

    相关文章:

    scala - 操作元组

    python - 在 Spark 中使用带有缺失值的 MLLib

    scala - Spark数据帧:How to add a index Column : Aka Distributed Data Index

    scala - 计算 Scala 中 List[List[T]] 中每个元素的出现次数

    Scala 隐式优先级系统

    scala - 如何访问 replaceAllIn() 计数器?

    apache-spark - Spark Word2vec 向量数学

    scala - 如何让 sbt 获取发布到我的 bintray 存储库的存储库?

    apache-spark - 在 Spark 中使用 mapPartitions 或分区器按键进行高效分组

    scala - 加入多个rdd