【发布时间】:2018-06-15 15:04:18
【问题描述】:
import spark.implicits._ 导入了什么? “隐含”是指某个包吗?如果是这样,为什么我在 https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package 的 Scala Api 文档中找不到它?
【问题讨论】:
标签: apache-spark
import spark.implicits._ 导入了什么? “隐含”是指某个包吗?如果是这样,为什么我在 https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package 的 Scala Api 文档中找不到它?
【问题讨论】:
标签: apache-spark
Scala 允许您将“动态”的东西导入作用域。你也可以这样做:
final case class Greeting(hi: String)
def greet(greeting: Greeting): Unit = {
import greeting._ // everything in greeting is now available in scope
println(hi)
}
SparkSession 实例带有一些隐含,您可以使用 import 语句在您的作用域中导入这些隐含。你得到的最重要的东西是Encoders 对DataFrames 和Datasets 的许多操作所必需的。它还将StringContext 带入了您使用$"column_name" 表示法所必需的范围内。
implicits 成员是SQLImplicits 的一个实例,其源代码(适用于2.3.1 版本)您可以查看here。
【讨论】:
通过对象导入是scala的特性,所以api文档没有描述。从 Apache spark 源代码来看,implicits 是 SparkSession 类中的一个对象类。 implicits 类扩展了 SQLImplicits,如下所示:
object implicits extends org.apache.spark.sql.SQLImplicits with scala.Serializable。 SQLImplicits 提供了更多功能,例如:
通过导入implicits 到import spark.implicits._,其中spark 是SparkSession 类型的对象,功能被隐式导入。
【讨论】: